/ / Wyrażenie regularne java do wyodrębnienia salda z ciągu znaków - java, regex, pattern-matching, matcher

Wyrażenie regularne java do wyodrębnienia salda z ciągu znaków - java, regex, pattern-matching, matcher

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 № 1

Przeszukujesz 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];