2017-04-03 119 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'')。 –