我正在尝试从其中的许多字符串中获取|<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}应该重复两次。为什么不这样做,有什么更好的方法呢?
答案 0 :(得分:2)
将捕获组转为非捕获组,并在正则表达式的最后添加\|
。因为re.findall
将返回捕获的字符,如果有任何捕获组,它将返回所有匹配的字符。由于你的正则表达式包含一个贪婪的捕获组,它只捕获最后一次重复,但匹配所有先前的重复。
>>> s = '|11 |22 |\n|33 |444 |\n'
>>> re.findall('(?:\|\d+\s+){2}\|', s)
['|11 |22 |', '|33 |444 |']