2016-12-20 4 views
2

Ich muss die folgenden Varianten übereinstimmen.Komplizierte regulären Ausdruck Hilfe benötigt in Java

annotation: 103810471047 
annotation: 1038104710 
ANnoTAtION: 1038104710 
ANnoTAtION: 103810571057 
Annotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12 
ANNotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12 

Ich habe Schwierigkeiten, mit den richtigen Ausdrücken zu kommen. Bis jetzt habe ich das folgende versucht, zwei Look-Ahead zu verwenden.

\b(\Qannotation\E|)\b((?=[^\w\r\n\.!\?$]{0,5}?)(?:[A-Z\d]+\b|(["']).*?\3))|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b) 

Aber es scheint nicht richtig zu entsprechen. Ich brauche es, um alles zu finden, das mit der Groß-/Kleinschreibung nicht übereinstimmt, gefolgt von einer Zahl zwischen 8-12 Ziffern oder einer Bindestrich-getrennten Wortliste mit 8,4,4,4,12,22 Zeichen.

Es sollte 2 Gruppen zurückgeben. erste Gruppe ist das Wort "Annotation" zweite Gruppe ist entweder die 8-12-stellige oder Bindestrich separate Wortliste mit 8,4,4,4,12,22 Zeichen.

Antwort

3

Sie können die Regex versuchen: (?i)annotation:.*?\s(?:(?:\d{8,12})|(?:\w{8}-\w{4}-\w{4}-\w{4}-\w{12}-\w{22}))

Demo here

+0

Was passiert, wenn zwischen der Anmerkung, da Nicht-Rückkehr Zeichen jede beliebige Anzahl von nicht-Wort sein kann? Wenn ich das richtig verstehe, erfasst es die ganze Sache als eine einzige Gruppe, gibt es eine Möglichkeit, es als 2 verschiedene Gruppen zu erfassen? –

+0

@JettinYeh - Können Sie mir ein Beispiel geben? – TheLostMind

+0

Zum Beispiel Annotation :::: 123456789 Gruppe 1 Gruppe 2 –