python正则表达式搜索findall捕获组

时间:2014-08-29 09:04:55

标签: python regex

我只想得到“66664324”,“)”和“ - ”之间的内容。 为什么search方法本身得到“)”和“ - ”。

a="(021)66664324-01"
b1=re.findall('\)(.*)-',a)
>['66664324']

b2=re.search('\)(.*)-',a).group()
>')66664324-'

两个代码段之间有什么区别。

2 个答案:

答案 0 :(得分:0)

尝试在re.search而不是group()中打印组(1)。其中group()打印整个匹配但组(1)仅打印捕获的组1( printig chars,它存在于组索引1 中)。

>>> a="(021)66664324-01"
>>> import re
>>> b2=re.search('\)(.*)-',a).group(1)
>>> b2
'66664324'
>>> b2=re.search('\)(.*)-',a).group()
>>> b2
')66664324-'

但是re.findall首先给予群组而不是匹配,并且它会在列表中返回结果,但search没有。这样b1=re.findall('\)(.*)-',a)为您提供所需的输出。如果存在组,则re.findall方法将仅打印不匹配的组。如果没有组,则只打印匹配。

>>> b1=re.findall('\)(.*)-',a)
>>> b1
['66664324']
>>> b1=re.findall('\).*-',a)
>>> b1
[')66664324-']

答案 1 :(得分:0)

区别在于b2.group(),它等于b2.group(0)。 并基于python正则表达式手册

  

模式的search()方法扫描字符串,所以匹配   在这种情况下,可能不会从零开始

因此,在您的情况下,结果从索引1开始。 我已经尝试过你的代码,只需稍加修改一下搜索规则,预期的结果就是索引1。

  

>>>一个= “(021)66664324-01”

     

>>> re.search('\)([0-9] *)',a).group(1)

     

'66664324'