re.findall()不返回所有字符

时间:2012-09-19 13:50:49

标签: python regex

我有这样的模式(找到3个字的缩写)

s='([A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'

我想找到

line='National Health Service (NHS)'
p=re.findall(s,line)

但是p只是['Service']而不是整个字符串。为什么呢?

1 个答案:

答案 0 :(得分:4)

您没有正确地对比赛进行分组,请改用:

s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'

.findall()返回整个匹配,除非您定义捕获组((...)),此时它将返回组中包含的结果。上述模式使用非捕获组((?:...))。由于这会使您的表达没有任何捕获组,.findall()会再次返回完整匹配。