我想在下面的字符串中搜索所有 '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 之一。
如何更改正则表达式以便找到所有2(不应考虑22 或 12 )?
使用否定的后视和否定的前瞻。
(?<!\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 断言 the2
前面将有任何但不是数字。2(?!\d)
断言 2 后面必须跟任何但不是数字。这将匹配2
输入字符串中的所有独立项:
(?<!\d)2(?!\d)
上面的正则表达式等价于下面的正则表达式,因为它总是有相同数量的匹配,并且这个正则表达式中捕获组 1 的内容与另一个正则表达式匹配的内容相同:
(?:^|\D)(2)(?:\D|$)
请注意,上面的(两个)正则表达式不关心输入的格式。它只是简单地提取任何独立的 2,即使在:
2 plain text, 2,43_2,lkjsf
^ ^ ^
如果您想将列与 value 匹配,2
而忽略or :2
2 2
abc 2
(?:^|,) *(2) *(?=,|$)
它将与2
此示例文本中的唯一匹配:
2 plain text, 2 ,2, 43_2, 2 2,2 ,234,2
^ ^ ^ ^
希望这是您正在寻找的
[^\d]2[^\d]
http://regex101.com/r/nD6nZ9/1
python代码必须类似于
p = re.compile(ur'[^\d]2[^\d]', re.MULTILINE)