2017-10-24 2 views
0

Ich habe die folgende Regexbearbeiten regex so gibt es immer noch ein Spiel ist, wenn eine gruppierte Element nicht angezeigt

(OUT|IN) (?P<typ>\D+?)(?=.*\bd:(?P<dest>\d+)\b)(?=.*\bs:(?P<src>\d+)\b) 

Dies ermöglicht es mir davon auf den folgenden String-Format oder Variationen zu entsprechen, und setzen Sie die Zahlen folgende s: und d: Begriffe in Gruppen src und dest:

OUT MYTYPE s:12 d:3 

Ich möchte meine Regex so bearbeiten, dass sie immer noch übereinstimmt, wenn einer oder mehrere dieser Begriffe nicht da sind. das heißt

OUT MYTYPE s:12 

noch passen würde, und die Gruppe src noch 12 enthalten würde, es wäre einfach nicht ein dest Gruppe sein.

Ich versuchte Putting ? am Ende der Wortgrenzen, aber es ist mit Fehlern kommen:

(?=.*\bs:(?P<src>\d+)\b)? 

-Test HERE

----- bearbeiten -----

Eine frühere Version dieses Frage enthielt Ziffern innerhalb der Gruppe. wie @Ashish_Ranjan richtig darauf hingewiesen, wäre dies benötigen [^ \ d \ s] + statt \ D +

Antwort

1

sollte dies tun, was Sie versuchen zu tun:

(OUT|IN) (?P<typ>\S+)\s+[s:]{0,}(?P<dest>\d*)\s*[d:]{0,}(?P<src>\d*) 

Live-Demo here

+0

Perfekt, danke! – mbadd

+0

Ich fand auch, dass dies funktioniert: (OUT | IN) (? P \ D +?) (? = (. * \ Bd:)? (? P \ d +)? \ B) (? = (. * \ Bs (? P \ d +)? \ B) – mbadd

+0

'\ D +' sollte '[^ \ d \ s] +' sein, wenn Ihr Typ Ziffern enthält, wie in der Frage, die es tut. –

Verwandte Themen