Ich habe eine Zeichenfolge, die enthält " Dear user BAL= 1,234/ "
.
Ich möchte extrahieren 1,234
aus dem String mit dem regulären Ausdruck. Es kann sein 1,23
, 1,2345
, 5,213
oder 500
final Pattern p=Pattern.compile("((BAL)=*(\s{1}\w+))");
final Matcherm m = p.matcher(text);
if(m.find())
return m.group(3);
else
return "";
Dies kehrt zurück 3
.
Welchen regulären Ausdruck soll ich machen? Ich bin neu in reguläre Ausdrücke.
Antworten:
1 für die Antwort № 1Sie suchen in Ihrer Regex nach Wortzeichen w+
aber Sie sollten nach Ziffern mit suchen d+
.
Zusätzlich gibt es das Komma, also musst du das auch anpassen.
Ich würde es benutzen
/.BAL = s ([d,] + (? = /))./
als Muster und erhalte nur die Nummer in der resultierenden Gruppe.
Erläuterung:
.*
passe alles vorher an
BAL=
Finde den String "BAL ="
s
Passen Sie ein Leerzeichen an
(
Starten Sie die passende Gruppe
[d,]+
passt jede Ziffer oder jedes Komma ein oder mehrmals an
(?=/)
passen Sie die erstere nur dann an, wenn ein Schrägstrich folgt
)
Ende übereinstimmende Gruppe
.*
stimmt mit allem überein
Dies ist nicht belegt, sollte aber so funktionieren:
final Pattern p=Pattern.compile(".*BAL=\s([\d,]+(?=/)).*");
final Matcherm m = p.matcher(text);
if(m.find())
return m.group(1);
else
return "";
Laut einem Onlinetester, das obige Muster stimmt mit dem Text überein:
BAL= 1,234/
0 für die Antwort № 2
Wenn es nicht durch den regulären Ausdruck extrahiert werden müsste, könnten Sie einfach Folgendes tun:
// split on any whitespace into a 4-element array
String[] foo = text.split("\s+");
return foo[3];