首頁  >  文章  >  後端開發  >  如何使用正規表示式提取日誌中兩個字串之間的匹配項?

如何使用正規表示式提取日誌中兩個字串之間的匹配項?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-23 22:17:02806瀏覽

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

用於提取兩個字串之間的匹配的正則表達式

給定一個包含由特定開始和結束標記括起來的多行字串的大型日誌文件,目標是僅提取並列印最短的此類字串。但是,開始標記在文件中的其他位置使用,因此簡單的正規表示式是不夠的。

為了解決這個問題,我們可以使用以下正規表示式:

(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']

以上是如何使用正規表示式提取日誌中兩個字串之間的匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn