Python 句子的正则表达式
我正在尝试编写一个正则表达式来表示一个具有以下条件的句子:以大写字母开头,以句点结尾(只能出现一个句点),并且允许包含逗号或分号,但如果包含,则必须显示为(字母)(分号)(空格)或(字母)(逗号)(空格) 我记下了大写字母和句号。我有代码的想法,但我认为我没有完全正确的语法 在英语中,我对句子的表达如下:Python 句子的正则表达式,python,regex,string,Python,Regex,String,我正在尝试编写一个正则表达式来表示一个具有以下条件的句子:以大写字母开头,以句点结尾(只能出现一个句点),并且允许包含逗号或分号,但如果包含,则必须显示为(字母)(分号)(空格)或(字母)(逗号)(空格) 我记下了大写字母和句号。我有代码的想法,但我认为我没有完全正确的语法 在英语中,我对句子的表达如下: (capital letter) ((lowercase letter)(space) ((lowercase letter)(comma)(space))* ((lowercase let
(capital letter) ((lowercase letter)(space) ((lowercase letter)(comma)(space))*
((lowercase letter)(semicolon)(space)* )* (period)
我意识到这忽略了句子的第一个字母后面紧跟着逗号或分号的情况,但是忽略这种情况是安全的
现在,当我尝试用Python编写代码时,我尝试了以下方法(我添加了空格以使内容更易于阅读):
我觉得这是个语法问题。。。我不确定是否允许在括号内包含分号和逗号部分
与定义匹配的示例输入:
"This is a sentence."
"Hello, world."
"Hi there; hi there."
"i ate breakfast."
"This is , a sentence."
"What time is it?"
与定义不匹配的示例输入:
"This is a sentence."
"Hello, world."
"Hi there; hi there."
"i ate breakfast."
"This is , a sentence."
"What time is it?"
使用lookaheads
删除无效句子更容易。请参阅演示
这与您上面所说的相符 只需从正则表达式中删除它
如果您需要python中的正则表达式,请尝试以下方法
re.compile(r'^[A-Z][A-Z]*(\s*|[A-Z]*|)(?我最终将正则表达式修改为
"^[A-Z][a-z\s (a-z,\s)* (a-z;\s)*]*\.$"
最后它运行得很好。感谢大家的帮助!尽可能提供示例输入和预期输出。编辑原始帖子,以包含匹配和不匹配表达式的示例输入。我以前从未使用过lookaheads,但我一定会研究它。我以前也从未听说过该网站,但它非常有用;谢谢!@CdSdw是否在某些测试用例中失败?
"i ate breakfast."
"This is , a sentence."
"What time is it?"
"I a ,d am."
"I a,d am."
import re
tests = ["This is a sentence."
,"Hello, world."
,"Hi there; hi there."
,"i ate breakfast."
,"This is , a sentence."
,"What time is it?"]
rex = re.compile(r'^[A-Z][a-z]*(\s*|[a-z]*|(?<![\s])[;,])*[.]$')
for test in tests:
print rex.match(test)
<_sre.SRE_Match object at 0x7f31225afb70>
<_sre.SRE_Match object at 0x7f31225afb70>
<_sre.SRE_Match object at 0x7f31225afb70>
None
None
None
"^[A-Z][a-z\s (a-z,\s)* (a-z;\s)*]*\.$"