我能不能写一个正则表达式来匹配一个模式,并使该模式的一部分是反向匹配的?

2024-10-02 02:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个正则表达式来删除大文本中的省略号

我需要找到一系列两个或更多的点,它们之间可能有空格,也可能没有空格。我使用的正则表达式正在查找我不想删除的句号实例,因此我希望正则表达式模式的一部分在后跟特定字符串时否定该模式

我一直在使用这种模式: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是省略号,但是,我还没有找到任何方法来做到这一点。有可能吗


Tags: 实例字符串文本rehereis模式some
1条回答
网友
1楼 · 发布于 2024-10-02 02:37:10

使用消极的向前看和消极的向后看:

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

相关问题 更多 >

    热门问题