正規表現を使用した複数行ブロックのマッチング
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 つのコンポーネントをキャプチャすることです:
いくつかのアプローチが失敗しました:
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