gpt4 book ai didi

python - 我可以编写一个匹配模式的正则表达式,并让该模式的一部分成为反向匹配吗?

转载 作者:行者123 更新时间:2023-11-28 16:55:57 25 4
gpt4 key购买 nike

我想编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com