簡體   English   中英

Python 多行正則表達式在每個時間戳后提取文本

[英]Python multiline regex extract text after every timestamp

我有一個正在嘗試解析的日志文件。 每個日志在一行的開頭都有一個時間戳,格式YYY-MMM-DD HH:MM:SS.SSSSSS -0400:時區信息是可選的(我現在可以忽略)。 我可以很好地匹配這些,但不能匹配時間戳之后的日志,它可能立即在同一行或下一行開始,並且可能有多行長。 我對正則表達式很滿意,但我很少做多行正則表達式。

這是我嘗試過的似乎是壁櫥的東西

# finds the first timestamp, everything to end of file is the log
re.findall('\n(^\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}.\d{6}).*?:(.*)', log, re.DOTALL)

# finds every timestamp, all logs are empty (obviously too un-greedy)
re.findall('\n(^\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}.\d{6}).*?:(.*?)', log, re.DOTALL)

我只是不知道如何 go 獲取隨后的日志,但如果看到另一個時間戳就停止。

您可以使用后跟日期時間模式的換行符拆分內容:

re.split(r'\n(?=\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6})', log)

細節

  • \n - 換行符
  • (?=\d{4}-[A-Za-z]{3}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6}) - 正向前瞻,需要以下模式立即出現在當前位置的右側:
    • \d{4}- - 四位數字和一個連字符
    • [A-Za-z]{3}- - 三個字母和一個連字符
    • \d{2} - 兩位數
    • - 一個空間
    • \d{2}: - 兩位數和:
    • \d{2}:\d{2} - - 兩位數, : , 兩位數
    • \. - 一個(注意它必須被轉義)
    • \d{6} - 六位數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM