ホームページ  >  記事  >  バックエンド開発  >  Python で正規表現を使用して複数行のブロックを照合する方法

Python で正規表現を使用して複数行のブロックを照合する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 22:16:02734ブラウズ

How to Match Multiline Blocks in Python Using Regular Expressions?

正規表現を使用した複数行のブロックのマッチング

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 つのコンポーネントをキャプチャすることです:

  • "some Varying TEXT"
  • すべて大文字の行は 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。