Python 正则表达式只绕过三个点
我有这个字符串:Python 正则表达式只绕过三个点,python,regex,Python,Regex,我有这个字符串: z='Certainly. I like apples... Really? By all means. Yes!' 我想捕获,?和而不是…子字符串,因此所需的输出应为: ['.', '?', '.', '!'] 这就是我得到的: >>> re.findall('(?<!\.)[\.?!]', z) ['.', '.', '?', '.', '!'] 与我所期望的完全相反,我不明白为什么,因为我要求前视不匹配,如果前面有两个点(尝试使用量词any
z='Certainly. I like apples... Really? By all means. Yes!'
我想捕获,?
和
而不是…
子字符串,因此所需的输出应为:
['.', '?', '.', '!']
这就是我得到的:
>>> re.findall('(?<!\.)[\.?!]', z)
['.', '.', '?', '.', '!']
与我所期望的完全相反,我不明白为什么,因为我要求前视不匹配,如果前面有两个点(尝试使用量词any operator+?*{1,2}
会产生错误,因为后视需要固定宽度的模式)
我误解了一些事情,因为我希望在前瞻中添加第二个\。
将产生我想要的输出
如果您有任何建议和简短的解释,我将不胜感激(找不到与我要求的完全相同的内容)。您可以尝试下面的正则表达式,它使用负向后看和向前看
>>> import re
>>> z='Certainly. I like apples... Really? By all means. Yes!'
>>> z
'Certainly. I like apples... Really? By all means. Yes!'
>>> m = re.findall(r'(?<!\.)[.?!](?!\.)', z)
>>> m
['.', '?', '.', '!']
>>重新导入
>>>当然可以。我喜欢苹果。。。真正地尽一切办法。是的
>>>z
”“当然。我喜欢苹果。。。真正地尽一切办法。是的
>>>m=re.findall(r’(?您可以尝试下面的正则表达式,它使用负向后看和向前看
>>> import re
>>> z='Certainly. I like apples... Really? By all means. Yes!'
>>> z
'Certainly. I like apples... Really? By all means. Yes!'
>>> m = re.findall(r'(?<!\.)[.?!](?!\.)', z)
>>> m
['.', '?', '.', '!']
>>重新导入
>>>当然。我喜欢苹果……真的吗?当然。是的
>>>z
当然。我喜欢苹果……真的吗?当然。是的
>>>m=re.findall(r’(?另一种可能性:
pat = re.compile(r"\.\.\.|([.?!])")
matches = filter(None, pat.findall(z))
这是通过匹配文本…
并在我们有机会将该字符串放入捕获组(在“或”管道(|
)的另一侧)之前使用该字符串,然后过滤结果以删除所有'
(这就是findall
在发现与空捕获组匹配时使用的方法)
这被一些人称为另一种可能性:
pat = re.compile(r"\.\.\.|([.?!])")
matches = filter(None, pat.findall(z))
这是通过匹配文本…
并在我们有机会将该字符串放入捕获组(在“或”管道(|
)的另一侧)之前使用该字符串,然后过滤结果以删除所有'
(这就是findall
在发现与空捕获组匹配时使用的方法)
这被一些人称为是的,这很有效,谢谢……为什么让它成为一个原始字符串有效?为了避免逃逸,它会寻找\。
文字吗?为什么它被读为。
而不是\。
?@xv70,因为在正则表达式解析字符串之前,你忘记了Python对字符串的解析。Python将\.
解析为文本
,然后正则表达式将
解析为“任意字符”。Python解析r“\
作为一个文本\。
和regex将\。
作为一个文本
@xv70 N.B.在regex上RE:raw string notation是的,这很有效,谢谢…为什么将其作为一个原始字符串工作?为了避免通过\N然后它不会寻找\。
文本?为什么它读作。
而不是\.
?@xv70,因为在正则表达式解析字符串之前,您忘记了Python对字符串的解析。Python将\.
解析为文本
,然后正则表达式将
解析为“任意字符”。Python解析r“\
作为文本\。
和正则表达式将\。
作为文本
@xv70 N.B.在正则表达式RE:raw string notation上解析