Извлечение числа Java Regex с различными форматами - PullRequest
0 голосов
/ 21 мая 2018

У меня есть строка, которая может отображать число в одном из следующих форматов:

Name ProductA Price R 3 250

или

Name ProductA Price R 500

Я не знаю, в каком формате появится цена, поэтому я хочу искать оба.Я знаю, что регулярное выражение для первой строки будет:

\\bPrice\\sR\\s\\b*(\\d\\s\\d+)

А для второй это будет:

\\bPrice\\sR\\s\\b*(\\d+)

Но как бы выглядело регулярное выражение, которое проверяет и то и другое и фиксирует ценуномер

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Сделать \\s\\d необязательной деталью, например так:

\\bPrice\\sR(?:\\s(\\d))?\\s(\\d+)
--          ^^^^^^^^^^^^^

Обратите внимание, что необязательной группой деталей является без захвата , что позволяет вам получить соответствующие части цены путем захватагруппы 1 и 2.

Демо.

0 голосов
/ 21 мая 2018

У вас может быть дополнительная группа для следующих цифр (цена в группе захвата одна):

\bPrice\sR\s(\d+(?:\s\d+)?)

Строковый литерал: \\bPrice\\sR\\s(\\d+(?:\\s\\d+)?)

Разбивка:

  • \bPrice\sR\s Соответствует буквенной строке Price R
  • ( Начало захвата первой группы
    • \d+ Соответствует последовательности цифр
    • (?:\s\d+)? Соответствует aгруппа цифр перед пробелом, если она существует, группа без захвата
  • ) Конец группы захвата

Или используйте положительный взгляд сзади, чтобы получить ценув группе 0:

(?<=\bPrice\sR\s)\d+(?:\s\d+)?

Строковый литерал: (?<=\\bPrice\\sR\\s)\\d+(?:\\s\\d+)?

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

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