匹配捕获组一次或多次的正则表达式

3 投票
4 回答
14643 浏览
提问于 2025-04-17 09:07

我正在尝试在一个字符串中找到成对的数字,并把它们分组捕获,但我似乎只能捕获到最后一组。

Regex:
(\d\d){1,3}

输入字符串:123456 789101

匹配 1: 123456
组 1: 56

匹配 2: 789101
组 1: 01

我想要的是像这样捕获所有的组: 匹配 1: 123456
组 1: 12
组 2: 34
组 3: 56

* 更新
看起来 Python 不允许你捕获多个组,比如在 .NET 中你可以一次性捕获所有组,因此 re.findall('\d\d', '123456') 就能完成这个任务。

4 个回答

2

试试这个:

import re
re.findall(r'\d\d','123456')
2
(\d{2})+(\d)?

我不太清楚Python是怎么处理匹配的,但我会这样做。

6

你不能仅仅通过一个正则表达式来做到这一点。这是一种特殊的计数情况,而单靠正则表达式是无法实现的。比如,使用\d\d会得到:

组1: 12
组2: 23
组3: 34
……

在Python的正则表达式库中,有一个不重叠的功能叫做re.findall(),可以解决这个问题。就像这样:

     re.findall('\d\d', '123456')

它会返回 ['12', '34', '56']

撰写回答