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

Python正则表达式匹配连续重复至少两次字符的结果异常问题

解决Python正则匹配连续重复字符的问题

你遇到的问题其实是re.findall()的特性导致的——当正则表达式里包含捕获组时,findall()会优先返回捕获组的内容,而不是整个匹配的完整字符串。你写的r'(.)\1{1,}'里,(.)是一个捕获组,它只捕获了单个重复的字符,所以最终返回的就是这些单个字符,而不是连续重复的完整序列。

下面给你两种简单的解决方案:

方法一:使用re.finditer()获取完整匹配

re.finditer()会返回一个迭代器,每个元素是匹配对象,我们可以通过match.group()获取整个匹配的字符串,完美解决你的需求:

import re

# 测试第一个例子
matches = re.finditer(r'(.)\1+', 'abbcdeee')
result = [match.group() for match in matches]
print(result)  # 输出: ['bb', 'eee']

# 测试第二个例子(无重复)
matches = re.finditer(r'(.)\1+', 'abcde')
result = [match.group() for match in matches]
print(result)  # 输出: []

# 测试第三个例子
matches = re.finditer(r'(.)\1+', 'aaabbbbcc')
result = [match.group() for match in matches]
print(result)  # 输出: ['aaa', 'bbbb', 'cc']

方法二:调整正则,用外层捕获组包裹整个重复序列

如果你还是想用re.findall(),可以把整个连续重复的序列用一个外层捕获组包裹,之后提取每个匹配结果的第一个元素即可:

import re

matches = re.findall(r'((.)\1+)', 'abbcdeee')
# findall会返回元组列表,每个元组的第一个元素是完整重复串,第二个是单个重复字符
result = [item[0] for item in matches]
print(result)  # 输出: ['bb', 'eee']

两种方法都能达到你的预期效果,个人更推荐第一种,代码更简洁直观,不需要处理额外的元组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:12:44