我想编写一个 RegEx 来从大文本中删除省略号。
我需要找到一系列两个或多个点,它们之间可能有空格,也可能没有。我正在使用的 RegEx 正在查找我不想删除的句号实例,因此我希望 RegEx 模式的一部分在后面跟有特定字符串时否定该模式。
我一直在使用这种模式:re.compile(r'\.[\.]*\.')
这个问题是文本中有一些合法的缩写被它捕获了。
以这段文字为例:
1. Here are ... some . . ellipses..
2. This. . .is ellipsis also.
3. Here is an abbreviation. .i.
在上面的例子中,我希望我的模式只找到 ...
, 。 .
、..
和 。 . .
在第 1 行和第 2 行中。我不希望它在第 3 行中找到任何内容,但是,它会找到 。 .
在里面。
我可以更新 RegEx 以排除模式,如果它们之前或之后是字母 i
,如下所示:re.compile(r'[^i]\.[\. ]*\.'[^i])
但随后该模式将找不到第 2 行中的省略号。
理想情况下,我能够否定模式中的整个子字符串,这样它就不会考虑 。 .
是省略号,如果它后面是 i.
或前面是 .i
,但是,我还没有找到任何方法来做到这一点。可能吗?
最佳答案
使用消极的前瞻性和消极的回顾:
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))
删除 .
后的文本序列:
1. Here are some ellipses
2. Thisis ellipsis also.
3. Here is an abbreviation. .i.
避免 .
后跟 i.
的序列,您必须包含另一个带有 i
的字符来处理这种情况:
. . .is
关于python - 我可以编写一个匹配模式的正则表达式,并让该模式的一部分成为反向匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58287016/