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

标签 python regex

我是编程新手,抱歉,如果这看起来微不足道:我有一段文本,我正试图使用​​正则表达式将其拆分成单独的句子。使用 .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/

相关文章:

python - 根据字典值计算 numpy 数组中向量的总和

c - 提取 URI 的第二个路径段的正则表达式是什么?

python - 无法在正则表达式中检测到 '-' 字符

c# - 在 Linq 语句中使用 "Match"

python Pandas |为每一列创建单独的列表

python - 如何在 python 中进行多处理器之间的竞争

java - 如何从扫描仪返回有效输入?

javascript - 用正则表达式解释 javascript 代码

python - "statsmodels.regression.linear_model. WLS"是如何工作的?

python - 如何将我的迭代存储到Python中的数组中?