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

正規表現を使用して複数行のテキスト ブロックをキャプチャするにはどうすればよいですか?

2024 年 11 月 3 日に公開
ブラウズ:476

How to Capture Multiline Text Blocks with Regular Expressions?

複数行のテキスト ブロックを一致させるための正規表現

複数行にまたがるテキストを一致させると、正規表現の構築に課題が生じる可能性があります。次のテキスト例を考えてみましょう:

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 つのコンポーネントをキャプチャすることです。「一部の可変テキスト」部分と、空の行を除く後続の大文字テキストのすべての行です。

間違ったアプローチ:

この問題を解決するための間違ったアプローチには次のものがあります:

  • 改行を一致させるために ^ アンカーと $ アンカーを使用する。複数行モードでは、^ は改行に続く位置に一致し、$ は改行に先行する位置に一致します。
  • DOTALL 修飾子を使用してすべてに一致しますが、ドット (.) は改行以外のすべてに一致するため、これは不要です。

解決策:

次の正規表現は、目的のコンポーネントを正しく取得します:

^(. )\n((?:\n. ) )

コンポーネントの内訳は次のとおりです。

  • ^ は行の先頭と一致します。
  • (. ) は「一部の可変テキスト」部分をグループ 1 にキャプチャします。
  • \n は改行文字に一致します。
  • ((?:\n. ) ) は、後続の大文字テキストのすべての行をグループ 2 にキャプチャします。 ?: 非キャプチャ グループ構造により、これらの行が
  • 繰り返し演算子により、少なくとも 1 行の大文字テキストが存在することが保証されます。

使用法:

Python でこの正規表現を使用するには、次のコードを使用できます:

import re

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

その後、match() メソッドを使用して文字列内の一致を見つけることができます:

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3