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 等价物?