2017-06-22 1 views
0

Ich habe zwei BeispieleExtrahierung Gruppe nur dann, wenn vorherige Gruppe abgestimmt wurde

abc 34 def12 ghi 
abc 34 33 ghi 

und einem regulären Ausdruck

^.*?([0-9]{2}) ?([a-z]{2,3})? ?([0-9]{2}).*$ 

(siehe https://regex101.com/r/U2JNaS/1)

ich es in einer solchen Weise zu modifizieren, müssen zu extrahieren $1, $2, $3 aber nur wenn$2 vorhanden war, d. h. ich brauche es zur Rückgabe

34 def12 
<WRONG> 

Wie erreicht man das?

+0

@anubhava Sorry, ich habe es nicht klar: Ersatz-Funktion gibt mir alles, wenn es keine Übereinstimmung gibt, meinte ich, dass das zweite Beispiel nicht übereinstimmt (bearbeitet). – Tim

+1

Dann machen Sie 2. nicht-optional als: ['^. *? ([0-9] {2}) \ s * ([az] {2,3}) \ s * ([0-9] {2}). $ $] (https://regex101.com/r/U2JNaS/2) – anubhava

Antwort

0

Beachten Sie, dass Sie nach der zweiten Erfassungsgruppe (([a-z]{2,3})) eine ? setzen.

Es bewirkt, dass die gesamte Regex übereinstimmt, auch wenn die bestimmte Zeile nicht den "Buchstaben" Teil enthält.

Entfernen Sie einfach diese ?, so dass in diesem Fall die gesamte Regex nicht übereinstimmen wird.

Verwandte Themen