使用正则表达式使用逗号查找字符串中的所有字符

时间:2014-10-15 04:55:29

标签: python regex rubular

我想在下面的字符串中搜索所有'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应该?)

3 个答案:

答案 0 :(得分:1)

使用负向后观和负向前瞻。

(?<!\d)2(?!\d)

DEMO

>>> 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的列,并忽略22 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)