Mam ciąg, który zawiera " Dear user BAL= 1,234/ "
.
Chcę wyodrębnić 1,234
z ciągu za pomocą wyrażenia regularnego. To może być 1,23
, 1,2345
, 5,213
lub 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 "";
To się zwraca 3
.
Jakiego wyrażenia regularnego powinienem dokonać? Jestem nowy w wyrażeniach regularnych.
Odpowiedzi:
1 dla odpowiedzi № 1Przeszukujesz w swoim wyrobie dla znaków słownych w+
ale powinieneś szukać cyfr za pomocą d+
.
Dodatkowo znajduje się przecinek, więc musisz również to dopasować.
Użyję
/.BAL = s ([d,] + (? = /)./
jako wzorzec i uzyskaj tylko liczbę w wynikowej grupie.
Wyjaśnienie:
.*
dopasuj wszystko wcześniej
BAL=
dopasuj ciąg "BAL ="
s
dopasuj odstęp
(
zacznij pasującą grupę
[d,]+
dopasowuje każdą cyfrę lub przecinek jeden lub więcej razy
(?=/)
dopasuj poprzedni, tylko jeśli następuje slash
)
dopasuj grupę końcową
.*
pasuje do wszystkiego
To jest untestet, ale powinno działać tak:
final Pattern p=Pattern.compile(".*BAL=\s([\d,]+(?=/)).*");
final Matcherm m = p.matcher(text);
if(m.find())
return m.group(1);
else
return "";
Według an tester online, powyższy wzór pasuje do tekstu:
BAL= 1,234/
0 dla odpowiedzi nr 2
Jeśli nie trzeba wyodrębniać go za pomocą wyrażenia regularnego, wystarczy:
// split on any whitespace into a 4-element array
String[] foo = text.split("\s+");
return foo[3];