簡體   English   中英

正則表達式捕獲部分文本,但如果找到模式則忽略 rest

[英]Regexp capture part of text but ignores rest if patern found

使用正則表達式我需要“過濾”一些文本,但前提是部分行匹配模式。

示例輸入是(每行是單獨的記錄):

OK: ALL OK (8536972.66889)
ERROR: ioerror/8536615.22927
OK: ALL OK (8546369.92291)

如果"OK: ALL OK" ,我需要過濾掉(浮動),在其他情況下,所有行都應該匹配。 每場比賽都應該在“同一個捕獲組”中(相同意味着總是在 4 個捕獲組中)。 所以正確的 output 應該是

OK: ALL OK
OK: ALL OK
ERROR: ioerror/8536615.22927
OK: ALL OK

我試過了: ((OK: ALL OK) (?:\(.*\))|ERROR: .*)

並得到結果:

Match 1:
Group 1: OK: ALL OK (8536972.66889)
Group 2: OK: ALL OK

Match 2:
Group1: ERROR: ioerror/8536615.22927

我需要始終在同一個捕獲組中的"OK: ALL OK""ERROR: ioerror/8536615.22927" ,有什么辦法嗎?

如果你想要第 1 組中的所有匹配項,你可以使用分支重置組作為外部組,並將 ERROR 部分放在它自己的組中:

(?|(OK: ALL OK) (?:\(.*\))|(ERROR: .*))

正則表達式演示

Al alternative without capture groups and using a lookahead assertion to assert a (...) part after matching OK: ALL OK

\bERROR:\h.*|\bOK:\hALL\hOK(?=\h+\([^()]*\))

正則表達式演示

暫無
暫無

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

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