我有一個日誌文件,我試圖用正則表達式(python)來解析。每行包含標籤「BEGIN」和「END」。另外,一行可能包含一個或多個位於「BEGIN」和「END」標籤之間的「VALUE」標籤。如果給定行上沒有「VALUE」標籤,我想要在「BEGIN」和「END」標籤之間截取字符串。但是,如果給定行上有「VALUE」標記,我想要捕獲標記「BEGIN」...「VALUE」,「VALUE」...「VALUE」和「VALUE」之間的所有字符串。 ..「END」標籤對。請注意,捕獲字符串也可能爲空。正則表達式捕獲給定的字符串錨點之間的字符串
給定的輸入:
Line1: words we can ignoreBEGINvalue1VALUEvalue with [email protected] we can ignore
Line2: BEGINvalue1VALUEVALUEVALUElastvalueENDwords we can ignore
Line3: words we can ignoreBEGINlastvalueEND
正則表達式應該返回:
Line1: (1)value1 (2)value with space (3)[email protected] (4)lastvalue
Line2: (1)value1 (2) (3) (4)lastvalue
Line3: (1)lastvalue
下面的正則表達式失敗,如果有一個以上的線路一個「VALUE」標籤,在這種情況下,它似乎只捕捉「BEGIN」...「VALUE」和「VALUE」...「END」之間的字符串,但未能捕獲「VALUE」...「VALUE」匹配項:
BEGIN(.*?)(?:VALUE(.*?))*END
這隻適用於PyPi正則表達式模塊。在下面看到更好的選擇。 –