我正在使用正则表达式来查找未用0x
.
例如。
0
50505
20201
0012
我的正则表达式是(?:[^(0x)]\d+)
,它(在我的脑海中)翻译为匹配任何不以 开头的数字序列0x
。但这不起作用 - 我错误地做出了什么假设?
[^(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']
对于不以 [0 或 x] 开头的任何内容,这看起来像是一个非捕获组。
你有没有尝试过消极的回顾?
(r'(?<!0x)\d+')
(我花了很长时间在手机上输入这个,现在我看到有人已经对其进行了排序。经验教训:手机上没有正则表达式。)