Regex

Sebastian29

Erfahrenes Mitglied
Moin, moin!

Ich möchte die 6 stelligen Zahlen aus dem Text "RG. 8100001228 VOM 050209" finden.

Code:
Pattern p = Pattern.compile( "\\d{6}", Pattern.MULTILINE );

Damit finde ich 2 Ergebnisse: 810000 und 050209! Das darf nicht sein.

Habt ihr eine Idee, wie ich nur diese Zahl 050209 aus dem Text ermitteln kann?

Gruß
Sebastian29
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("\\d+$").matcher("RG. 8100001228 VOM 050209");
        if(m.find()){
            System.out.println(m.group());    
        }
    }
}

Gruß Tom
 
Wie wäre es damit:
Code:
(1[0-2]|0[1-9])[1-2][0-9][0-9][0-9]
Das kann man auch noch anders schreiben, aber ich wollte es verständlich halten
 
Moin Thomas und RealHAZZARD!

Code:
(1[0-2]|0[1-9])[1-2][0-9][0-9][0-9]
Hm, dieser Ausdruck findet leider kein Ergebnis.


"\\d+$" bedeutet aber, dass die Zahlen im Text am Ende steht. Der findet auch so:

"RG. 8100001228 VOM 05020902154584" --> Ergebnis: 05020902154584

Das will ich nicht, sondern ich möchte irgendwo im Text eine 6-stellige Zahl ermitteln, z.B.:

"RG. 8100001228 VOM 050209" --> 1 Ergebnis: 050209
"VOM 050209 RG. 8100001228" --> 1 Ergebnis: 050209
"RG. 8100001228 VOM 050209 152368" --> 2 Ergebnisse: 050209, 152368
"152368 RG. 8100001228 VOM 050209" --> 2 Ergebnisse: 050209, 152368
usw.

Also zu meinem Ausdruck "\\d{6}" ist zwar schon richtig, aber es fehlt noch was, damit die ersten 6 Zahlen "810000" nicht finden darf. Ich weiss nur nicht, wie ich den Ausdruck noch verfeinern kann!

Gruß
Sebastian
 
So sollte es gehen, wenn der String das Format des Datums beibehält.

Code:
[0-2][1-9][\\d][1-9][\\d]{2}
 
Hi hammet!

OK, das ist schon mal der gute Ausdruck. :)

Welchen Ausdruck könnte ich nehmen, wenn es doch kein Datum wäre, sondern z.B. eine 6-stellige Callnummer oder eine besondere 6-stellige Nummer?

z.B.:

"CallNr. 810056 RG. 8100001228 VOM 050209" --> 2 Ergebnisse: 810056, 050209

Es hat 2 verschiedenen Bedeutungen, denn es muss nicht nach Datum gesucht werden, sondern auch nach Callnummer gesucht werden!

Gruß
Sebastian29
 
Naja, wenn die Callnummer mitten im String steht, dann könntest du damit vielleicht etwas anfangen:

Code:
[\\s][\\d]{6}[\\s]

Musst dann allerdings die Leerschritte ersetzen.
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)").matcher("152368 RG. 8100001228 VOM 050209");
        while(m.find()){
            System.out.println(m.group());
        }
    }
}

Gruß Tom
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)").matcher("152368 RG. 8100001228 VOM 050209");
        while(m.find()){
            System.out.println(m.group());
        }
    }
}

Gruß Tom

Das ist der exakte Ausdruck, den ich mir vorgestellt habe! :)

Mit Lookbehind und Lookahead kannte ich noch gar nicht!

Super, vielen vielen Dank!

@hammet

Trotzdem danke für die Mühe, da ich mit dem Ausdruck von Thomas sauber treffen kann. :)

Gruß
Sebastian29
 
Ja kein Problem, die beiden Ausrücke, die Thomas benutzt hat, habe ich noch nie verwendet. Aber so hab ich auch was dazu gelernt ;)
 
Zurück