」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用正規表示式捕獲多行文字區塊?

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

發佈於2024-11-03
瀏覽:442

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 中。 ?: 非捕獲組構造可防止這些行被捕獲為單獨的組。
  • 重複運算子確保至少存在一行大寫文字。

用法:

用法:
import re

pattern = re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)
要在Python中使用這個正規表示式,可以使用以下程式碼:

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
然後您可以使用match() 方法在字串中尋找符合項:

How to Capture Multiline Text Blocks with Regular Expressions?

match = 模式.match(文本) 如果匹配: text1 = match.group(1) text2 = match.group(2)

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3