3

给定一个带有以下文本的 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)

实际上,这只会检索最后一行。我该怎么做才能得到最后五个?

4

3 回答 3

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)'
于 2013-07-16T13:33:19.417 回答
2

为什么不只是:

text[text.index('\n\n') + 2:].splitlines()
# ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee']
于 2013-07-16T13:37:02.347 回答
0

如果您搜索的文本对您不想要的第一部分的字符数有某种限制,为什么不只搜索超过 X 个字母的单词,例如:

^[a-z]{2,}

这将使每个单词大于 2 个字符。

您可以控制为:

  • {3} 恰好出现 3 次;
  • {6,} 至少出现 6 次;
  • {2,5} 2 到 5 次出现。
于 2013-07-16T13:40:33.697 回答