Регулярное выражение, чтобы найти ценность денег - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть текст ответа:

Cuoc no truoc -2.134VND. Cuoc phat sinh tam tinh den 31/08/2018:
3`2.666VND (da tru KM,goi cuoc...). TKFastpay: 0VND.Tra 01.Trang sau 02.Thoat\",15

я хочу получить результат - ценность денег до "VND" -> -2.134 и 32.666 и 0.

У меня есть регулярное выражение

String regex = "(?<![^=])([\\d]*)(?!$[VND])";

но это не работа. Пожалуйста, помогите мне!

Ответы [ 5 ]

0 голосов
/ 01 сентября 2018

Решение:

String regex = "(-?[0-9]+[\.]+[0-9]*)VND"

Описание:

  1. Вы должны создать группу перед каждой строкой VND
  2. Сначала в группе вы должны проверить, доступен ли знак минус или нет: -?
  3. нам нужно захватить каждую цифру, и мы ожидаем иметь одну или несколько: так [0-9] +
  4. там может быть знак точки (ноль или единица) в случае десятичного числа. таким образом, мы имеем [.] +
  5. снова у вас может быть другая серия цифр после десятичной (ноль или более) точки, поэтому: [0-9] *
0 голосов
/ 01 сентября 2018

Вы можете использовать положительный прогноз (?= и границу слова после VND \b.

-?\d+(?:\.\d+)?(?=VND\b)

Regex demo

Это будет соответствовать

  • -? Необязательный знак минус (Чтобы разрешить плюс, вы можете использовать необязательный класс символов [+-]?
  • \d+ Совпадение с одной или несколькими цифрами
  • (?:\.\d+)? Необязательная группа без захвата, соответствующая точке и одной или нескольким цифрам
  • (?=VND\b) Позитивный прогноз, который утверждает, что справа это VND

В Java:

-?\\d+(?:\\.\\d+)?(?=VND\\b)

Демонстрация Java

0 голосов
/ 01 сентября 2018

Попробуйте это простое регулярное выражение

В Java

String regex = "(-?\\d*?\\.?\\d+)(?=VND)";

регулярное выражение

(-?\d*?\.?\d+)(?=VND)

см. образец регулярного выражения

0 голосов
/ 01 сентября 2018

Вы можете использовать это регулярное выражение с предвидением:

[+-]?\d+\.?\d*(?=VND)

RegEx Demo

Информация о регулярных платежах:

  • [+-]?: совпадение необязательно + или -
  • \d+\.?\d*: совпадение числа с плавающей запятой или целого числа
  • (?=VND): Утверждать, что у нас VND на следующей позиции

Java-код:

final String regex = "[+-]?\\d+\\.?\\d*(?=VND)";
final String string = "Cuoc no truoc -2.134VND. Cuoc phat sinh tam tinh den 31/08/2018:\n"
+ "32.666VND (da tru KM,goi cuoc...). TKFastpay: 0VND.Tra 01.Trang sau 02.Thoat\\\",15";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}
0 голосов
/ 01 сентября 2018

Если я понимаю требование, то регулярное выражение, используемое в повторном порядке, может быть:

(-?)[\\d][\\d.]*(?=VND)

Идея состоит в том, что вам нужна хотя бы одна цифра, затем больше цифр или десятичная дробь, а затем VND.

Немного улучшенным подходом будет разделение [.] Между цифрами, поэтому: ((-?) [\ D] + [\ d] * [.]?)

(= ВНД?)

Онлайн пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...