You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何通过正则表达式获取分组的所有匹配结果?

问题根源

正则中(two\s|three\s|four\s)*是被*量词修饰的重复捕获组,Python标准库re对这类分组仅会存储最后一次匹配的内容,之前匹配到的two 会被后续匹配到的four 覆盖,因此调用group(1)只能拿到单个结果。

实现方案

直接使用re.findall()扫描全串,提取所有符合规则的匹配项即可,无需写外层包裹的全串匹配逻辑,代码如下:

import re

myStr = "one two four five"
myPattern = r'two\s|three\s|four\s'
res = re.findall(myPattern, myStr)
print(res)

运行输出为['two ', 'four '],和预期结果一致。

如果需要保留原正则的上下文校验规则(即目标项前为单词+空格、后接单词),可以通过零宽断言做上下文判断,不会消耗字符影响后续匹配:

import re

myStr = "one two four five"
# 零宽断言校验前后文,不占用匹配字符
myPattern = r'(?<=\w\s)(two\s|three\s|four\s)(?=\w)'
res = re.findall(myPattern, myStr)
print(res)

re.findall()会遍历整个字符串,返回所有不重叠的匹配结果:如果正则没有捕获组,就返回完整匹配的子串;如果存在捕获组,就返回所有捕获组的匹配内容,天然适配“获取分组所有匹配结果”的需求。

内容的提问来源于stack exchange,提问作者lorakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:24:15