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

这仅返回结果[89],我需要返回全部 89%。请问有什么办法吗?

4

3 回答 3

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

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

于 2013-04-16T19:43:21.897 回答
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%']
于 2013-04-16T19:42:24.283 回答
2

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

>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
['89%']
于 2013-04-16T19:43:26.133 回答