Python的 - re.findall返回事与愿违的结果(Python - re.findall

2019-08-31 08:27发布

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

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

Answer 1:

平凡解:

>>> 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%']


Answer 2:

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

当有捕捉组findall只返回捕获的部分。 使用?:防止括号从一个捕获组。



Answer 3:

使用一个外组,与内基团的非捕获组:

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


文章来源: Python - re.findall returns unwanted result