2016-05-04 16 views
1

Mein regulärer Ausdruck nehmen ist wie folgt:Regex Rohr muss erstes Spiel

 .*(kgrj4e|\*)[^:]*:([^;]*);? 

Der ‚kgrj4e‘ Teil eine Benutzer-ID und ist dynamisch. Die PR .... Teile sind Drucker. Wenn die Benutzer-ID nicht gefunden wird, möchte ich den Standarddrucker (PR12346).

Für ersten Teststring unten Ich will Ergebnis PR12345 sein, aber ich PR12346

snljoe, snlaks, kgrj4e, snlbla: PR12345; *: PR12346

Hinweis: Die Benutzer snljoe, snlaks und snlbla sind nur Beispiele und können völlig anders sein. Tatsächlich kann die Liste der Benutzer länger oder kleiner sein.

Für zweiten String-Test unter I Ergebnis will PR12346

snljoe sein, snlaks, snlbla: PR12345; *: PR12346

Wie der regulären Ausdruck zu beheben, so dass beide Test Strings das erwartete Ergebnis geben?

+0

Möchten Sie die Zeichenfolge 'PR12346' extrahieren? – rock321987

+0

benötigen Sie zwei separate Regex für zwei verschiedene Fälle? – rock321987

+0

Warum 'PR12345' im ersten Beispiel? 'kgrj4e' ist nicht richtig vor dem Wert, den Sie brauchen, gibt es eine' snlbla' –

Antwort

1

Sie können die Nummer mit der Suche bekommen und ersetzen:

      Suchen nach: ^(?:(?!.*,kgrj4e(?:[;,])).*\*:(\w+)|.*?(PR\d+).*)
Ersetzen durch: $1$2

Siehe this demo

Ich gehe davon aus, dass die kgrj4e ein Benutzer -definierter Wert, der in der Zeichenfolge fehlen sollte, um dem letzten Druckerwert zu entsprechen. Wenn es vorhanden ist, wird der erste Druckerwert zurückgegeben.

+0

Haben Sie diesen Ansatz überprüft? Nochmal, welche Sprache benutzt du? –