我有这样的模式(找到3个字的缩写)
s='([A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'
我想找到
line='National Health Service (NHS)'
p=re.findall(s,line)
但是p只是['Service']而不是整个字符串。为什么呢?
答案 0 :(得分:4)
您没有正确地对比赛进行分组,请改用:
s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'
.findall()
返回整个匹配,除非您定义捕获组((...)
),此时它将返回组中包含的结果。上述模式使用非捕获组((?:...)
)。由于这会使您的表达没有任何捕获组,.findall()
会再次返回完整匹配。