首頁 >後端開發 >Python教學 >如何在Python中將多行文字區塊與正規表示式配對?

如何在Python中將多行文字區塊與正規表示式配對?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-25 10:25:17657瀏覽

How to Match Multi-Line Text Blocks with Regular Expressions in Python?

在Python 中將多行文字區塊與正規表示式配對

在Python 中,處理多行文字時,正規表示式匹配可能具有挑戰性。例如,考慮以下文本,其中“n”代表換行符:

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]
[repeat the above a few hundred times].

目標是捕獲兩個元素:

  • “一些變化的文本”
  • 從第一個元素下方兩行開始的所有大寫文字行,作為單一捕獲組(稍後可以刪除換行符)。

先前已嘗試使用以下正規表示式的變體不成功:

re.compile(r"^>(\w+)$$(\[.$]+)^$", re.MULTILINE)
re.compile(r"(^[^>]\[\w\s]+)$", re.MULTILINE|re.DOTALL)

解:

要正確配對多行文本,請使用以下正規表示式:

re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)

這個模式來匹配以下內容:

  • 群組1: "some Varying TEXT"
  • 組2: 以2 開頭的所有大寫文本行“some Varying TEXT”下面的行

要點:

  • ^ 和$ 錨點分別符合換行符之後和之前的位置。
  • ?: 運算子使換行符組不被捕獲。
  • .* 量詞捕捉一行或多行大寫文字。

替代解決方案:

如果目標文字可能包含換行符(n) 以外的其他類型的換行符,請使用下列更具包容性的版本:

re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)

以上是如何在Python中將多行文字區塊與正規表示式配對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn