如何使用Python正则表达式重复括号组n次?

时间:2017-11-15 04:03:43

标签: python regex

我正在尝试从其中的许多字符串中获取|<digit><whitespace>对。我正在使用正则表达式(\|\d+\s+){2}来执行此操作,即:

>>> import re
>>> s = '|11 |22    |\n|33  |444 |\n'
>>> re.findall('(\|\d+\s+){2}', s)
['|22    ', '|444 ']

我期待的是:

['|11 |22    |', '|33  |444 |']

因为()应该定义一个组,{2}应该重复两次。为什么不这样做,有什么更好的方法呢?

1 个答案:

答案 0 :(得分:2)

将捕获组转为非捕获组,并在正则表达式的最后添加\|。因为re.findall将返回捕获的字符,如果有任何捕获组,它将返回所有匹配的字符。由于你的正则表达式包含一个贪婪的捕获组,它只捕获最后一次重复,但匹配所有先前的重复。

>>> s = '|11 |22    |\n|33  |444 |\n'
>>> re.findall('(?:\|\d+\s+){2}\|', s)
['|11 |22    |', '|33  |444 |']