我只想得到“66664324”,“)”和“ - ”之间的内容。
为什么search
方法本身得到“)”和“ - ”。
a="(021)66664324-01"
b1=re.findall('\)(.*)-',a)
>['66664324']
b2=re.search('\)(.*)-',a).group()
>')66664324-'
两个代码段之间有什么区别。
答案 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'