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

如何用re.findall匹配字符串中的数字及其连续重复项?

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

你用的(\d)\1+有两个问题:

  • 它只能匹配至少出现2次的连续重复数字,单个数字(比如"1""3")会被直接忽略
  • 因为正则里有捕获组,re.findall会只返回捕获组的内容(也就是单个数字,而非整个连续重复串)

要实现匹配所有单个或连续重复的同数字串,你可以用下面两种方法:

方法一:调整正则表达式,直接获取完整匹配

使用((\d)\2*)作为匹配模式,这个正则会把每个连续重复的数字组完整捕获到第一个分组里:

import re
s = "1222344"
result = [match[0] for match in re.findall(r'((\d)\2*)', s)]
print(result)  # 输出: ['1', '222', '3', '44']

方法二:使用re.finditer遍历匹配对象

这种方法更直观,直接获取每个匹配的完整内容:

import re
s = "1222344"
result = [match.group() for match in re.finditer(r'(\d)\1*', s)]
print(result)  # 输出: ['1', '222', '3', '44']

补充说明

  • (\d)\1*的含义:匹配一个数字\d,后面跟0次或多次和它相同的数字\1*(\1是反向引用第一个捕获组的内容),这样就能覆盖单个数字(重复0次)和连续重复的情况
  • 如果用(\d)\1+,+表示至少1次重复,所以只会匹配出现2次及以上的连续数字,自然漏掉单个数字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:03:11