首頁  >  文章  >  後端開發  >  如何使用正規表示式捕獲多行文字區塊?

如何使用正規表示式捕獲多行文字區塊?

Patricia Arquette
Patricia Arquette原創
2024-10-25 06:05:02777瀏覽

How to Capture Multiline Text Blocks with Regular Expressions?

符合多行文字區塊的正規表示式

符合跨多行的文字可能會為正規表示式建構帶來挑戰。考慮以下範例文字:

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)

目標是捕捉兩個組成部分:「some Varying TEXT」部分和所有後續大寫文字行,不包括空白行。

不正確的方法:

解決此問題的一些不正確方法包括:

  • 使用^ 和$ 錨點來匹配換行符。在多行模式下,^ 符合換行符後面的位置,$ 符合換行符前面的位置。
  • 使用 DOTALL 修飾符來匹配所有內容,這是不必要的,因為點 (.) 會匹配除換行符之外的所有內容。

解:

以下正規表示式正確捕捉所需的組件:

^(.+)\n((?:\n.+)+)

以下是其組件的細部分:

  • ^ 符合行的開頭。
  • (. ) 將「some Varying TEXT」部分捕獲到組 1 中。
  • n 符合換行符。
  • ( (?:n. ) ) 將所有後續的大寫文字行擷取到組 2 中。 ?: 非捕獲組構造可防止這些行被捕獲為單獨的組。
  • 重複運算子確保至少有一個存在一行大寫文字。

用法:

要在Python 中使用此正規表示式,您可以使用以下程式碼:

<code class="python">import re

pattern = re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>

然後您可以使用match() 方法在字串中尋找匹配項:

<code class="python">match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)</code>

以上是如何使用正規表示式捕獲多行文字區塊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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