gpt4 book ai didi

python - python 正则表达式中的多个负向后断言?

转载 作者:太空狗 更新时间:2023-10-29 20:44:05 26 4
gpt4 key购买 nike

我是编程新手,抱歉,如果这看起来微不足道:我有一段文本,我正试图使用​​正则表达式将其拆分成单独的句子。使用 .split 方法,我搜索一个点后跟一个大写字母,如

"\. A-Z"

但是我需要按以下方式细化此规则:.(点)前面不能有 AbsS .如果它后面跟着一个大写字母 (A-Z),如果它是月份名称,它应该仍然不匹配,例如 January |二月 |三月

我尝试实现前半部分,但即使这样也行不通。我的代码是:

"( (?<!Abs)\. A-Z) | (?<!S)\. A-Z) ) "

最佳答案

首先,我想你可能想用 \s+ 替换空格,或者 \s 如果它确实是一个空格(你经常会在英语中找到双空格文本)。

其次,要匹配大写字母,您必须使用 [A-Z],但是 A-Z 将不起作用(但请记住可能有其他大写字母而不是 A-Z ...).

此外,我想我知道为什么这不起作用。正则表达式引擎将尝试匹配 \. [A-Z] 如果它前面没有 AbsS。问题是,如果它前面有一个 S,它前面不是 Abs,所以第一个模式匹配。如果它前面有 Abs,它没有前面有 S,所以第二个模式版本匹配。无论哪种方式,这些模式之一都会匹配,因为 AbsS 是互斥的。

问题第一部分的模式可能是

(?<!Abs)(?<!S)(\. [A-Z])

(?<!Abs)(?<!S)(\.\s+[A-Z])

(根据我的建议)

那是因为你必须避免 |,没有它,表达式现在说 前面没有 Abs前面没有 S。如果两者都为真,模式匹配器将继续扫描字符串并找到您的匹配项。

为了排除我想出这个正则表达式的月份名称:

(?<!Abs)(?<!S)(\.\s+)(?!January|February|March)[A-Z]

同样的论点也适用于消极的前瞻模式。

关于python - python 正则表达式中的多个负向后断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689046/

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