给定一个带有以下文本的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)
这确实只会检索最后一行。我能做些什么来获得最后五个?
答案 0 :(得分:4)
您正在重复捕获组本身,它会在下一次重复时覆盖每个匹配。
如果你这样做
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)'
答案 1 :(得分:2)
为什么不呢:
text[text.index('\n\n') + 2:].splitlines()
# ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee']
答案 2 :(得分:0)
如果您搜索到的文字对您不想要的第一部分的字符数有某种限制,为什么不设置只搜索超过X个字母的字词,如:
^[a-z]{2,}
这将使每个单词大于2个字符。
您可以控制为: