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 +
Perfekt, danke! – mbadd
Ich fand auch, dass dies funktioniert: (OUT | IN) (? P \ D +?) (? = (. * \ Bd:)? (? P \ d +)? \ B) (? = (. * \ Bs (? P \ d +)? \ B) –
mbadd
'\ D +' sollte '[^ \ d \ s] +' sein, wenn Ihr Typ Ziffern enthält, wie in der Frage, die es tut. –