正则表达式负向外观匹配排除项目

时间:2017-10-06 19:22:03

标签: python regex

我很难理解这个表达方式:

/((?<!=0)x2)/

尝试匹配&#34; x2&#34;在&#34; 0x2 - 2x = 1&#34;

的字符串上

目标是回顾&#34; x2&#34;并检查它是否是&#34; 0&#34;然后避免选择它。 如果只是&#34; x2&#34;然后我想要它被选中。 (例如字符串&#34; x2 - 3x = 4&#34;)

我已经尝试了两种方式,使用正/负前瞻/后方,并始终保持与零(0)匹配。

任何人都可以对这可能发生的原因有所了解吗?

我正在使用https://regex101.com/来测试它(选择了Python选项)。

我认为这是对的:

?<!=

如果它们位于实际匹配exp之前,则需要排除以下符号?

3 个答案:

答案 0 :(得分:1)

这里使用的格式有一些问题是javascript而不是python,你不需要前导/尾随/

/((?<!=0)x2)/

我们到达

((?<!=0)x2)

了解环顾四周

              Positive  Negative
Look ahead    (?=       (?!
Look Behind   (?<=      (?<!

所以我们到了

((?<!0)x2)

然后围绕()仍有一些冗余,你需要它在完全匹配中分离组,所以简化它

(?<!0)x2

工作演示here

答案 1 :(得分:0)

  

如果它只是“ x2 ”,那么我希望它被选中

如果x2被认为是一个单独的子字符串 - 请使用以下正则表达式模式:

(?!<0)\b(x2)

https://regex101.com/r/jpEviL/3

答案 2 :(得分:0)

你很亲密;但是,在Python中,负面的后视只是?<!,没有=

import re
s = "0x2 - 2x = 1"
if re.findall("(?<!0)x2", s):
   print("no zero as a coefficient")
else:
   print('found zero as coefficient')