2010-12-14 20 views
0

Entschuldigung, wenn der Titel nicht beschreibend genug ist. Ich möchte in der Lage sein, in eine Gruppe zu extrahieren, wenn eine spezifisch formatierte Sequenz ein- oder mehrmals vorkommt.Java RegEx prüft auf eine oder mehrere formatierte Zeichenfolgen

Hier mein aktueller REGEX- ist> (entfernt doppelte Schrägstriche für Klarheit)

(.?): ([AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2}) (: [AZ \ d] {3} - [AZ \ d] {5} - [AZ \ d] {2}).

Ich weiß, ich bin nah, aber nicht ganz da.

diese So gelten

TEST1: 001-12345-67: ABC-DEFGH-IJ

kehrte als TEST1, 001-12345-67, ABC-DEFGH-IJ (Kommata getrennte Gruppen)

UNABHÄNGIG: 123-12345-12: 987-98765-98: ASD-asdfa-AS (aktuelle Regex funktioniert nicht für diese)

kehrte als WHATEVER, 123-12345-12,: 987-98765-98: 001-12345-67

: ASD-asdfa-AS

Und das nicht

TEST1 sind WAS: 123-12345-12: HMMMM

Es ist wie ich brauche eine Klammer mit einem '.' für die ganze zweite Sequenz. Danke für die Kontemplation. PS Regex macht mir Kopfschmerzen.

+0

Haben Sie das Regex-Plugin für IntelliJ IDEA versucht Es ist Genie –

+0

Könnten Sie bitte das Muster, das Sie versuchen klären zu lassen. für uns? – jjnguy

+0

Nein, ich habe nicht.Ich verwende Netbeans IDE. – NickG

Antwort

0

Ich würde so etwas tun:

/(.*?(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}){2,})/ 

und spaltete dann den erfassten Text auf dem „:“ die einzelnen Stücke zu erhalten.

EDIT: Warten Sie, wollen Sie nur drei Chunks unabhängig davon, wie viele Gruppen es gibt? Das ist ziemlich einfach. Man könnte es erhalten, indem split(':', 3) Aufruf (und nicht nur split(':') über die Ergebnisse der oben genannten, oder für die regex Lösung gehen:

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})((?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})+)/ 

(Die dritte Gruppe mit einem extra starten „:“ dass Sie dies nicht tun wollen, die entfernt werden können, wenn Sie das Muster Blähungen noch nichts ausmacht):

/(.*?):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}):([A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2}(?::[A-Z\d]{3}-[A-Z\d]{5}-[A-Z\d]{2})*)/ 
+0

alles nach dem zweiten Doppelpunkt und dann separat analysieren.Der zweite Teil müsste dann auf Gültigkeit überprüft werden und wenn er nicht besteht, herausspringen und fortfahren, als ob er nicht ursprünglich zusammenpasste. – NickG

+0

@NickG: Aber Sie können es einfach in nur einem Regex auf Gültigkeit überprüfen. –

+0

Das scheint zu funktionieren. Danke vielmals. Ich werde es nach einigen zusätzlichen Tests als beantwortet markieren. Vielen Dank – NickG

Verwandte Themen