繁体   English   中英

如何使用正则表达式匹配多行

[英]How to match several lines with regex

给定具有以下文本的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个字符。

您可以控制为:

  • {3}恰好3次出现;
  • {6,}至少发生6次;
  • {2,5}发生2到5次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM