我想在下面的字符串中搜索所有'2':
2, 10,11,1,1, 22,1,12,1,1, 1,2 , 2 ,2
我给了正则表达式:
(^\s*(2)\s*)|(\s*,\s*(2)\s*(,|$))
但是不会搜索最后一个<2> 。
我现在改变了正则表达式,
(^\s*(2)\s*)|(\s*,\s*(2)\s*)
但现在它需要 22中<2>中的一个。
如何更改正则表达式,以便找到全部 2s(22或12应该不?)
答案 0 :(得分:1)
使用负向后观和负向前瞻。
(?<!\d)2(?!\d)
>>> import re
>>> s = "2, 10,11,1,1, 22,1,12,1,1, 1,2 , 2 ,2"
>>> re.findall(r'(?<!\d)2(?!\d)', s)
['2', '2', '2', '2']
<强>解释强>
(?<!\d)2
Lookbehind声称2
前面会有任何数字而不是数字。2(?!\d)
断言2必须跟随任何数字而不是数字。答案 1 :(得分:1)
这将匹配输入字符串中的所有独立2
:
(?<!\d)2(?!\d)
上面的正则表达式相当于以下正则表达式,因为它总是具有相同的匹配数,并且此正则表达式中捕获组1的内容与其他正则表达式匹配的内容相同:
(?:^|\D)(2)(?:\D|$)
请注意,上面的(两个)正则表达式并不关心输入的格式。它只是简单地提取任何独立的2,即使在:
2 plain text, 2,43_2,lkjsf
^ ^ ^
如果您希望匹配值2
的列,并忽略2
或2 2
中的abc 2
:
(?:^|,) *(2) *(?=,|$)
它将匹配此示例文本中的唯一2
:
2 plain text, 2 ,2, 43_2, 2 2,2 ,234,2
^ ^ ^ ^
答案 2 :(得分:0)
希望这就是你要找的东西
[^\d]2[^\d]
http://regex101.com/r/nD6nZ9/1
python代码必须类似于
p = re.compile(ur'[^\d]2[^\d]', re.MULTILINE)