正则表达式负回顾后匹配排除的项目

问题描述:

我难以理解这个表达式:正则表达式负回顾后匹配排除的项目

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

虽然试图匹配“X2”上的串“0X2 - 2 = 1”

的目标是寻找在“x2”的后面并检查它是否为“0”,然后避免选择它。 如果它只是“x2”,那么我希望它被选中。 (例如字符串“x2-3x = 4”)

我已经尝试了正反两方面的方式,它始终保持匹配零(0)。

任何人都可以提供一些见解,为什么会发生这种情况?

我使用https://regex101.com/来测试它(选中Python选项)。

我说得对,当我认为:

?<!= 

意味着下面的符号需要当它们存在于前的实际匹配EXP被排除在外?

+2

尝试'/((? kaza

+0

哦,哇,它正要让我疯狂......无处不在网络上回顾后有等于以及 –

有几个问题在这里使用的格式是Javascript而不是蟒蛇,你不需要前/后/

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

我们得到

((?<!=0)x2) 

理解的目光变通

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

所以我们得到

((?<!0)x2) 

然后还有的周围(),你需要它全场比赛中的独立团一定的冗余,所以把它简化

(?<!0)x2 

工作演示here

+1

感谢队友,这是分组为neccesary我目前的目标,所以这是故意的,反正,我会接受你的anwser几分钟:) –

如果只是 “X2” 那么我想它选择

在情况下,如果x2认为是一个单独的子 - 使用下面的正则表达式:

(?!<0)\b(x2) 

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

You are close;然而,在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')