「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で正規表現を使用して複数行のブロックを照合する方法

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

2024 年 11 月 4 日に公開
ブラウズ:967

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 行に配置されていますその下 (改行文字を除く)

いくつかのアプローチが失敗しました:

re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines

この問題に対処するには、次の正規表現を利用します。

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

アンカー "^" と「$」は改行と一致しません。したがって、複数行モードでは、"^" が改行の後に続き、"$" が改行の前に置かれます。

さらに、さまざまな改行形式に注意してください。改行、復帰、またはその両方が含まれる可能性のあるテキストの場合は、より包括的な正規表現:

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

ドットによってすでに改行が除外されているため、ここでは DOTALL 修飾子は不要です。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3