2017-10-06 81 views
0

我難以理解這個表達式:正則表達式負回顧後匹配排除的項目

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

雖然試圖匹配「X2」上的串「0X2 - 2 = 1」

的目標是尋找在「x2」的後面並檢查它是否爲「0」,然後避免選擇它。 如果它只是「x2」,那麼我希望它被選中。 (例如字符串「x2-3x = 4」)

我已經嘗試了正反兩方面的方式,它始終保持匹配零(0)。

任何人都可以提供一些見解,爲什麼會發生這種情況?

我使用https://regex101.com/來測試它(選中Python選項)。

我說得對,當我認爲:

?<!= 

意味着下面的符號需要當它們存在於前的實際匹配EXP被排除在外?

+2

嘗試'/((?<!0)x2)/' – kaza

+0

哦,哇,它正要讓我瘋狂......無處不在網絡上回顧後有等於以及 –

回答

1

有幾個問題在這裏使用的格式是Javascript而不是蟒蛇,你不需要前/後/

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

我們得到

((?<!=0)x2) 

理解的目光變通

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

所以我們得到

((?<!0)x2) 

然後還有的周圍(),你需要它全場比賽中的獨立團一定的冗餘,所以把它簡化

(?<!0)x2 

工作演示here

+1

感謝隊友,這是分組爲neccesary我目前的目標,所以這是故意的,反正,我會接受你的anwser幾分鐘:) –

0

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')