ホームページ  >  記事  >  バックエンド開発  >  正規表現を使用してログ内の 2 つの文字列間の一致を抽出するにはどうすればよいですか?

正規表現を使用してログ内の 2 つの文字列間の一致を抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-23 22:17:02806ブラウズ

How to Extract Matches Between Two Strings in Logs with a Regex?

2 つの文字列間の一致を抽出する正規表現

特定の開始マーカーと終了マーカーで囲まれた複数行の文字列を含む大きなログ ファイルがある場合、目標は、そのような最短の文字列のみを抽出して出力することです。ただし、開始マーカーはファイル内の他の場所で使用されているため、単純な正規表現では十分ではありません。

これに対処するには、次の正規表現を使用できます:

(start((?!start).)*?end)

この正規表現は次のとおりに一致します

  • 「start」で始まり、その後に「start」を含まない文字が続く。
  • 「end」で終わる。

を使用するPython の re.findall メソッドと単一行修飾子 (re.S) を使用すると、入力ファイルからそのような文字列をすべて取得できます:

<code class="python">import re

text = """
start spam
start rubbish
start wait for it...
    profit!
here end
start garbage
start second match
win. end
"""

matches = re.findall('(start((?!start).)*?end)', text, re.S)
print(matches)</code>

これにより、目的の結果が出力されます:

['start wait for it...
    profit!
here end', 'start second match
win. end']

以上が正規表現を使用してログ内の 2 つの文字列間の一致を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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