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

时间:2013-04-16 19:39:14

标签: python regex findall

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

这只返回结果[89],我需要返回整个89%。有什么想法可以吗?

3 个答案:

答案 0 :(得分:10)

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

当有捕获组findall时,仅返回捕获的部分。使用?:可防止括号成为捕获组。

答案 1 :(得分:6)

琐碎的解决方案:

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

更美丽的解决方案:

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

最漂亮的解决方案:

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

答案 2 :(得分:2)

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

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