Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 句子的正则表达式_Python_Regex_String - Fatal编程技术网

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)*]*\.$"