Regex von String.matches für Split benutzen?

jeipack

Erfahrenes Mitglied
Hi
ich habe verschiedene Strings und will sofern er mit Anfang oder Anfang1 (weitere siehe tests Array) ist den vorangegangenen Text rausnehmen und sofern eine Zahl nach Anfang steht muss ich diese auch wissen.

Hier der Code:
Java:
String[] tests ={"blah", "blah Anfang", "blah Anfang ", "blah Anfang1", "blah Anfang 1", "blah Angang 1b"};
		
String regex=".*Anfang[ 0-9]*$";
	
for(String test:tests) {
	System.out.println(test+": "+test.matches(regex));
}
aus "blah Anfang" soll blah werden (und die Info, dass dort ein Anfang stand - was ich aber mit matches schon herausfinde). Aus "blah Anfang1" soll blah werden und die Info, dass dort eine 1 stand).

Nun kann ich aber nicht replace nehmen. Weil z.B. ich das gleiche auch mit Ende, Ende1 etc machen muss und es texte ala:
"fehlende Blah Ende1" gibt.
--> Wobei mir gerade auffällt das Ende immer gross geschrieben ist und wenn es in einem anderen Wort vorkommt ist es immer klein geschrieben. Also würde das replace schon gehen, ich müsste vorher einfach zuerst prüfen ob und welche Zahl nach Ende steht.

Trotzdem hier die Frage, wie würdet ihr das machen?
 
Hallo,

suchst du sowas?
Java:
package de.tutorials;

public class RegexExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] tests = { "blah", "blah Anfang", "blah Anfang ",
                "blah Anfang1", "blah Anfang 1", "blah Angang 1b" };

        String regex = "(.*) Anfang\\s*(\\d*)";

        for (String test : tests) {
            if (test.matches(regex)) {
                System.out
                        .println(test + ": " + test.replaceAll(regex, "$1 $2"));
            }
        }

    }

}

Gruß Tom
 
Hallo,

suchst du sowas?
Funktioniert super danke.
Ich habe noch nie wirklich mit den Variablen gearbeitet. Scheint aber recht einfach zu sein $1 bezieht sich auf die erste Klammer, $2 auf die zweite usw.

Nur wieso matched es nicht auch "blah Anfang 1b" (ausser dass es falsch geschrieben wurde..).
"(.*) Anfang\\s*(\\d*)" heisst ja nur, irgendwelche Zeichen, dann Anfang, dann Leerzeichen, dann Zahlen. Ohne "$" (=Zeilenende) kann da doch noch beliebig andere Zeichen kommen. Merke gerade dass das gleiche auch beim Anfang ist und auch kein "^" nötig ist.
Habe ich da was falsches im Kopf oder kontrolliert matches sowieso immer den ganzen String?


Ah und die werte getrennt raus holen geht nur so oder?
test.replaceAll(regex, "$1");
test.replaceAll(regex, "$2");


Gruss
jei
 
Hallo,

$1 bezieht sich auf die erste Klammer, $2 auf die zweite usw.
$1 / $2 bezieht sich jeweils auf die Gruppe 1 bzw. die Gruppe 2. Die Gruppe 0 ist der komplette matchende String.

schau mal hier:
Java:
package de.tutorials;

public class RegexExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] tests = { "blah", "blah Anfang", "blah Anfang ",
                "blah Anfang1", "blah Anfang 1", "blah Anfang 1b" };

        String regex = "(.*) Anfang\\s*(\\d*).*";

        for (String test : tests) {
            if (test.matches(regex)) {
                System.out
                        .println(test + ": " + test.replaceAll(regex, "$1 $2"));
            }
        }

    }

}

Gruß Tom
 

Neue Beiträge

Zurück