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

Posted

技术标签:

【中文标题】Python - re.findall 返回不需要的结果【英文标题】:Python - re.findall returns unwanted result 【发布时间】:2013-04-09 08:46:27 【问题描述】:
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")

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

【问题讨论】:

把它变成一个字符串; "89%" 【参考方案1】:
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%")
['89%']

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

【讨论】:

100|[0-9][0-9]|[0-9] 更改为\d1,3 会改变模式的意图吗?【参考方案2】:

简单的解决方案:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于Python - re.findall 返回不需要的结果的主要内容,如果未能解决你的问题,请参考以下文章

python RE findall() 返回值是一个完整的字符串

是否有 Python 的 re.findall/re.finditer(迭代正则表达式结果)的 Perl 等价物?

Python re模块下的常用方法

python 正则(re.compile()/re.findall())

python re模块

python正则中re.findall匹配多个条件