Python – re.findall返回不需要的结果

re.findall("(100|[0-9][0-9]|[0-9])%", "89%") 

这只返回结果[89] ,我需要返回整个89%。 任何想法如何做到这一点?

琐碎的解决scheme:

 >>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%") ['89%'] 

更漂亮的解决scheme

 >>> re.findall("(100%|[0-9]{1,2}%)","89%") ['89%'] 

最漂亮的解决scheme:

 >>> re.findall("(?:100|[0-9]{1,2})%","89%") ['89%'] 
 >>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%") ['89%'] 

当有捕获组时,只发现所捕获的部分。 使用?:防止括号成为捕获组。

使用外部组,内部组是非捕获组:

 >>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%") ['89%']