2017-04-03 146 views
2

當我使用負向前查找此字符串蟒蛇正則表達式負先行

1pt 22px 3em 4px 

這樣

/\d+(?!px)/g 

我得到這樣的結果

(1, 2, 3) 

,我想所有的22px來被丟棄,但我不知道我該怎麼做

+0

如果這些字母一直存在,只需使用'\ d +(?! px)[a-z] +' – sln

回答

3

添加一個數字模式先行:

\d+(?!\d|px) 

regex demo

這樣一來,你就不會允許一個數字匹配後的1個或多個數字已經匹配。

另一種方法是使用的原子團的工作周圍像

(?=(\d+))\1(?!px) 

regex demo。在這裏,(?=(\d+))將一個或多個數字捕獲到組1中,並且反向引用將消耗這些數字,從而防止回溯到\d+模式。如果數字跟在px之後,(?!px)將無法​​匹配,並且無法回溯到2

這兩種解決方案將與re.findall一起使用。

+0

請參閱[Python演示](http://ideone.com/95npxQ)。記住在聲明正則表達式模式時使用原始字符串文字('r'pattern'')。 –