Мне нужно извлечь информацию о цене в заданной текстовой строке.До сих пор я был успешным с нижним регулярным выражением (\\d{1,3}(,\\d{3})*(\\.\\d+)?)
в java со строками типа price will be 90,500 USD
Но теперь у меня также есть строки с другим номером до начала цены (eg: for order number 12345 the price will be 100,500 USD)
.В этом случае мое извлечение цены не удается.Например, приведенное выше даст мне 123
в результате.
Могу ли я использовать регулярное выражение или другой способ извлечения только информации о цене, независимо от того, присутствует другое число или нет?(цена всегда будет разделена тысячами с десятичными точками или без них)
ниже приведен полный код, который я сейчас использую для этой работы:
private String getPrice(String fileText) {
String lines[] = fileText.split(System.lineSeparator());
for (String line : lines) {
Pattern p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+))");
Matcher m = p.matcher(line);
if (m.find()) {
return m.group(0);
}
p = Pattern.compile("(\\d{1,3}(,\\d{3})*(\\.\\d+)?)");
m = p.matcher(line);
if (m.find()) {
return m.group(0);
}
}
return "";
}
Я ожидаю, что совпадение будет в словеуровень.(eg: 123 of 12345 should not match.)
Мой разделитель слов только space
.123-456
считается одним словом.Так что из 123456
, 123-456
, 123,456
, 123,456.56
, A123456
только 123,456
, 123,456.56
должны совпадать.Проблема в том, что мой текущий код извлекает 123
из 123456
, 123-456
и A123456