使用正規表示式符合多行區塊
使用Python 的正規表示式來符合跨多行的文字時可能會遇到困難。考慮以下範例文字:
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).
目標是捕捉兩個元件:
已嘗試多種方法但未成功:
<code class="python">re.compile(r"^>(\w+)$$(\n[.$]+)^$", re.MULTILINE) # Capture both parts re.compile(r"([^>][\w\s]+)$", re.MULTILINE|re.DOTALL) # Just textlines</code>
要解決此問題,請使用以下正規表示式:
<code class="python">re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>
請記住,錨點「^」和「$」不符換行符。因此,在多行模式下,「^」在換行符之後,「$」在換行符之前。
此外,請注意各種換行符號格式。對於可能包含換行符、回車符或兩者的文本,請使用以下更具包容性的正則表達式:
<code class="python">re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)</code>
此處不需要DOTALL 修飾符,因為點已經排除了換行符。
以上是如何在Python中使用正規表示式來匹配多行塊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!