给定一个带有以下文本的 unicode 对象:
a
b
c
d
e
aaaa
bbbb
cccc
dddd
eeee
我想得到第二组行,换句话说,空白行之后的每一行。这是我使用的代码:
text = ... # the previous text
exp = u'a\nb\nc\nd\n\e\n{2}(.*\n){5}'
matches = re.findall(exp, text, re.U)
实际上,这只会检索最后一行。我该怎么做才能得到最后五个?
您正在重复捕获组本身,它会用下一次重复覆盖每个匹配项。
如果你这样做
exp = ur'a\nb\nc\nd\n\e\n{2}((?:.*\n){5})'
你把五行放在一起。
除非您手动拼出组,否则您无法进入单个匹配项:
exp = ur'a\nb\nc\nd\n\e\n{2}(.*\n)(.*\n)(.*\n)(.*\n)(.*\n)'
为什么不只是:
text[text.index('\n\n') + 2:].splitlines()
# ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee']
如果您搜索的文本对您不想要的第一部分的字符数有某种限制,为什么不只搜索超过 X 个字母的单词,例如:
^[a-z]{2,}
这将使每个单词大于 2 个字符。
您可以控制为: