Python 我可以写一个匹配某个模式的正则表达式,并使该模式的一部分为反向匹配吗?
我想写一个正则表达式来删除大文本中的省略号 我需要找到一系列两个或更多的点,它们之间可能有空格,也可能没有空格。我使用的正则表达式正在查找我不想删除的句号实例,因此我希望正则表达式模式的一部分在后跟特定字符串的情况下否定该模式 我一直在使用这种模式:Python 我可以写一个匹配某个模式的正则表达式,并使该模式的一部分为反向匹配吗?,python,regex,Python,Regex,我想写一个正则表达式来删除大文本中的省略号 我需要找到一系列两个或更多的点,它们之间可能有空格,也可能没有空格。我使用的正则表达式正在查找我不想删除的句号实例,因此我希望正则表达式模式的一部分在后跟特定字符串的情况下否定该模式 我一直在使用这种模式:re.compile(r'\.[\.]*\.) 问题是,文本中有一些合法的缩写,这些缩写正被这篇文章抓住 以本文为例: 1. Here are ... some . . ellipses.. 2. This. . .is ellipsis also.
re.compile(r'\.[\.]*\.)
问题是,文本中有一些合法的缩写,这些缩写正被这篇文章抓住
以本文为例:
1. Here are ... some . . ellipses..
2. This. . .is ellipsis also.
3. Here is an abbreviation. .i.
在上面的示例中,我希望我的模式只查找…
,代码>,。
和代码>在第1行和第2行。我不希望它在第3行中找到任何内容,但是,它将找到代码>在其中
如果模式前面或后面有字母I
,我可以更新正则表达式以排除模式,例如:re.compile(r'[^I]\.[^I]*.[^I])
,但是模式在第2行中找不到省略号
理想情况下,我能够对模式中的整个子字符串求反,这样它就不会思考如果code>后面跟有i.
或前面跟有.i
,则code>是省略号,但是,我还没有找到任何方法来做到这一点。有可能吗?使用负向前看和负向后看:
import re
text = """
1. Here are ... some . . ellipses..
2. This. . .is ellipsis also.
3. Here is an abbreviation. .i.
"""
pattern = re.compile(r'(?<!\.i)\.[ \.]*\.(?!i\.)')
print(pattern.findall(text)) # ['...', '. .', '..', '. . .']
print(pattern.sub('', text))
避免将
序列后跟i。
必须使用i
包含另一个字符才能处理此情况:
. . .is
(?同时使用向后看和向前看
. . .is