2

我正在使用正则表达式来查找未用0x.

例如。

0
50505
20201
0012

我的正则表达式是(?:[^(0x)]\d+),它(在我的脑海中)翻译为匹配任何不以 开头的数字序列0x。但这不起作用 - 我错误地做出了什么假设?

4

2 回答 2

5

[^(0x)]在您的正则表达式中匹配任何不是(, 0, x,的字符)

使用负面回顾:

>>> re.findall(r'(?<!0x)\d+\b', '0 0x111 50505 20201 0012')
['0', '11', '50505', '20201', '0012']

来自http://docs.python.org/2/library/re.html

(?<!...)

如果字符串中的当前位置之前没有匹配 ...,则匹配。这称为否定后向断言。与肯定的后向断言类似,包含的模式必须只匹配一些固定长度的字符串。以否定后向断言开头的模式可能在被搜索的字符串的开头匹配。


更新

使用以下正则表达式:

>>> re.findall(r'\b\d+\b', '0 0x111 50505 20201 0012')
['0', '50505', '20201', '0012']
于 2013-07-31T06:10:04.123 回答
1

对于不以 [0 或 x] 开头的任何内容,这看起来像是一个非捕获组。

你有没有尝试过消极的回顾?

(r'(?<!0x)\d+')

(我花了很长时间在手机上输入这个,现在我看到有人已经对其进行了排序。经验教训:手机上没有正则表达式。)

于 2013-07-31T06:16:36.850 回答