簡體   English   中英

正則表達式以特定模式開始新匹配

[英]Regex start new match at specific pattern

你好,我對正則表達式有點陌生,有一個小問題,也許很簡單。

我有給定的文字:

17.11.2020 15:32 typical Pat. seems sleeping
Additional test

17.11.2020 15:32 typical Pat. seems sleeping
Additional test

17.11.2020 15:32 typical Pat. seems sleeping
Additional test

我當前的正則表達式(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?(.*)只匹配到睡眠,但產生 3 個匹配正確。 但我也需要第二組中的Additional test文本。 我嘗試了類似(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?([,.:\w\s]*)但現在我只有一場大型比賽,因為第二組將一切都拿走直到最后。

我如何匹配所有內容,直到開始有日期的新行並從那里創建新匹配?

如果您確定只有一條附加線要匹配,您可以使用

(?m)^(\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2})\s*(.*(?:\n.*)?)

請參閱正則表達式演示 細節:

  • (?m) - 多行修飾符
  • ^ - 行首
  • (\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2}) - 組 1:日期時間字符串
  • \s* - 零個或多個空格
  • (.*(?:\n.*)?) - 第 2 組:除換行符之外的任何零個或多個字符 盡可能多的字符,然后是可選行,換行符后跟除換行符之外的任何零個或多個字符盡可能多的字符。

如果可以有任意數量的行,您可以考慮

(?m)^(\d{2}\.\d{2}\.\d{4}[\p{Zs}\t]\d{2}:\d{2})[\p{Zs}\t]*(?s)(.*?)(?=\n\d{2}\.\d{2}\.\d{4}|\z)

請參閱此正則表達式演示 這里,

  • (?m)^(\d{2}\.\d{2}\.\d{4}[\p{Zs}\t]\d{2}:\d{2}) - 匹配相同如上,只是\s被替換為僅匹配水平空白的[\p{Zs}\t]
  • [\p{Zs}\t]* - 0+ 個水平空白字符
  • (?s) - 現在, . 將匹配任何字符,包括換行符
  • (.*?) - 第 2 組:任何零個或多個字符,盡可能少
  • (?=\n\d{2}\.\d{2}\.\d{4}|\z) - 直到最左邊出現的換行符,后跟日期字符串,或直到結尾細繩。

您正在使用\s重復使用帶有字符 class [,.:\w\s]**量詞,並且\s也匹配換行符並且匹配太多。

您可以使用不匹配換行符的(.*\r?\n.*)匹配行的 rest ,然后匹配同一組中的換行符和下一行。

^(\d{2}.\d{2}.\d{4}\s\d{2}:\d{2})\s?(.*\r?\n.*)

正則表達式演示

如果可以跟隨多行,則匹配以下所有不以類似日期的模式開頭的行。

^(\d{2}\.\d{2}\.\d{4})\s*(.*(?:\r?\n(?!\d{2}\.\d{2}\.\d{4}).*)*)

解釋

  • ^字符串的開頭
  • (捕獲組 1
  • \d{2}\.\d{2}\.\d{4}匹配類似日期的模式
  • )關閉第 1 組
  • \s*匹配 0+ 個空白字符(或匹配沒有換行符的空白字符[^\S\r\n]*
  • (捕獲組 2
    • .*匹配整行
    • (?:\r?\n(?.\d{2}\.\d{2}\.\d{4}).*)*如果整行不以日期開頭,則可選擇重復匹配整行圖案
  • )關閉第 2 組

正則表達式演示

暫無
暫無

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

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