Python re.findall()不会返回所有字符
我有这样的模式(找到3个单词的缩写) 我想找到Python re.findall()不会返回所有字符,python,regex,Python,Regex,我有这样的模式(找到3个单词的缩写) 我想找到 line='National Health Service (NHS)' p=re.findall(s,line) 但是p只是['Service'],而不是整个字符串。为什么?您没有正确分组匹配,请改用此选项: s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)' .findall()返回整个匹配,除非您定义了捕获组((…)),此时它将返回组中包含的结果。上面的模式使用非捕获组((?:…))。由于这会使表达式没有任何捕
line='National Health Service (NHS)'
p=re.findall(s,line)
但是p只是['Service'],而不是整个字符串。为什么?您没有正确分组匹配,请改用此选项:
s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'
.findall()
返回整个匹配,除非您定义了捕获组((…)
),此时它将返回组中包含的结果。上面的模式使用非捕获组((?:…)
)。由于这会使表达式没有任何捕获组,.findall()
再次返回完全匹配项。如果未正确分组匹配项,请改用以下方法:
s='(?:[A-Z][a-z]+ ){2,4}\([A-Z]{2,4}\)'
.findall()
返回整个匹配,除非您定义了捕获组((…)
),此时它将返回组中包含的结果。上面的模式使用非捕获组((?:…)
)。因为这样会使表达式没有任何捕获组,.findall()
会再次返回完全匹配项。这是正确的,但有助于解释原因。@StevenRumbalski:是的,抱歉,有一段时间没有捕获组。这是正确的,但有助于解释原因。@StevenRumbalski:是的,抱歉,有一点时间不够了。你为什么要整根绳子?这就像什么都不做一样。你为什么要整根绳子?这和什么都不做是一样的。