簡體   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