ホームページ  >  記事  >  バックエンド開発  >  Python で複数行のテキスト ブロックを正規表現と照合する方法

Python で複数行のテキスト ブロックを正規表現と照合する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 10:25:17560ブラウズ

How to Match Multi-Line Text Blocks with Regular Expressions in Python?

Python で複数行のテキスト ブロックを正規表現と照合する

Python で複数行のテキストを扱う場合、正規表現の照合が困難になる場合があります。たとえば、「n」が改行を表す次のテキストについて考えてみましょう:

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 行下で始まる大文字のテキストのすべての行を単一のキャプチャ グループとして (改行は後で削除できます)。

次の正規表現のバリエーションを使用した以前の試みは、次のとおりです。失敗:

re.compile(r"^>(\w+)$$(\[.$]+)^$", re.MULTILINE)
re.compile(r"(^[^>]\[\w\s]+)$", re.MULTILINE|re.DOTALL)

解決策:

複数行のテキストを正しく照合するには、次の正規表現を使用します:

re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)

Thisパターンは以下に一致します:

  • グループ 1: "some Varying TEXT"
  • グループ 2: 2 行目で始まる大文字のテキストのすべての行"some Varying TEXT" の下の行

キーポイント:

  • ^ アンカーと $ アンカーは、それぞれ改行の直後と直前の位置に一致します。
  • ?: 演算子は、改行グループを非キャプチャーにします。
  • .* 量指定子は、1 行以上の大文字テキストをキャプチャします。

代替解決策:

ターゲット テキストに改行 (n) 以外の他の種類の改行が含まれる可能性がある場合は、次のより包括的なバージョンを使用します:

re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)

以上がPython で複数行のテキスト ブロックを正規表現と照合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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