Ich bin neu im Java-Konzept des regulären Ausdrucks.
Könnte mir bitte jemand den korrekten regulären Ausdruck mitteilen, den ich für die folgende Zeichenfolge verwenden soll -
String exp = "ABCD_123_abc".
und der reguläre Ausdruck, den ich für die obige Zeichenfolge verwende, ist:
regExp = "([a-zA-Z]+)_([0-9]+)_([a-z]+)"
Aber die Ausgabe des unteren Codes ist "**No Match Found**"
Das Problem ist: Sie haben versehentlich die Verwendung des regexp-Musters und des zu überprüfenden Ausdrucks
vertauscht %Vor%Sollte verwendet werden
%Vor%Die Die Funktion Pattern.compile (String regex) akzeptiert den regulären Ausdruck.
BEARBEITEN
Ich entschuldige mich, meine erste Lösung war wirklich etwas, das nie getan werden sollte: die Namen der Variablen widersprachen der Bedeutung ihrer Werte. .. Das bedeutet Schmerz und Tränen, und von wütenden Kollegen getroffen zu werden, während angeschrien wird. Und es gibt keine gültige Verteidigung gegen dieses Verbrechen ...
EDIT2 Sie können die einzelnen übereinstimmenden Gruppen durch die Matcher.group (int) Funktion:
%Vor% Hinweis: Ich habe 2
als Argument verwendet:
0
bedeutet die übereinstimmende Eingabefolge 1
bedeutet die erste Gruppe ( ABC
in diesem Fall) Wenn Sie nur den 123
-Teil benötigen, schreibe ich die Regex aus Gründen der Übersichtlichkeit neu:
In diesem Fall muss jedoch group()
mit 1
aufgerufen werden, da jetzt die erste (und einzige) übereinstimmende Gruppe die erste ist:
Sie kompilieren den regulären Ausdruck nicht. Du brauchst
%Vor%d. Der obige Code verwirrt die Regexp- und die Eingabezeichenfolge. Ihre tatsächliche Regexp ist jedoch korrekt.
Ihre (redigierte) Regexp ist in Ordnung.
Wenn Sie 123
extrahieren möchten, können Sie matcher.group(2)
verwenden. Diese Methode kann nur aufgerufen werden nach matches
oder find
. matcher.group(n)
gibt das n-te capture group
zurück. Eine Erfassungsgruppe ist ein Teil Ihrer Regexp, der in Klammern eingeschlossen ist. matcher.group(0)
gibt die übereinstimmende Zeichenfolge zurück.
Beispiel
%Vor%druckt
%Vor%In diesem Fall, wenn Sie 123 abrufen möchten, verwenden Sie den folgenden Code:
%Vor%Diese Ausgabe wird wie folgt ausgegeben: 123
Ihre Regex ist völlig in Ordnung.
Dieses Muster funktioniert - es passt zu einer beliebigen Zahl von Groß- oder Kleinbuchstaben, dann zu einem Unterstrich, dann zu einer beliebigen Anzahl von Ziffern, dann zu einem Unterstrich und dann zu einer beliebigen Anzahl von Groß- oder Kleinbuchstaben. Wenn Sie genauer sein möchten, können Sie {n}
anstelle von +
verwenden, um eine bestimmte Anzahl von Zeichen zu finden.