如何用正则表达式输出连续数字出现次数?当前仅能获取首个匹配
解决连续数字出现次数统计问题
你的问题出在两个地方:一是re.search只会返回第一个匹配项,没法获取所有结果;二是当前正则(\d)\1+只能匹配连续重复2次及以上的数字,漏掉了单次出现的情况。
下面是修正后的代码,能完整统计所有连续数字的出现次数:
import re sequence = '1222311' result = [] # 匹配所有连续相同的数字,包括单次出现的 for match in re.finditer(r'(\d)\1*', sequence): digit = int(match.group(1)) occurrence = len(match.group()) result.append((occurrence, digit)) # 按要求格式输出 print(' '.join(f'({cnt}, {num})' for cnt, num in result))
代码说明:
- 用
re.finditer替代re.search:它会返回所有匹配项的迭代器,遍历就能拿到全部结果。 - 正则
(\d)\1*:(\d)捕获单个数字,\1*表示和该数字相同的字符出现0次或多次,既能匹配连续重复的数字,也能覆盖单次出现的情况。 - 每个匹配的
match.group()是完整的连续数字串,长度就是出现次数;match.group(1)是对应的单个数字,转成整数即可。
运行代码后,输出结果完全符合要求:
(1, 1) (3, 2) (1, 3) (2, 1)
内容的提问来源于stack exchange,提问作者memotib827
相关产品推荐
相关产品推荐

