正規表現を使用した複数行のブロックのマッチング
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).
目的は 2 つのコンポーネントをキャプチャすることです:
いくつかのアプローチが失敗しました:
<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 中国語 Web サイトの他の関連記事を参照してください。