Сопоставьте все виды цен в тексте с использованием регулярных выражений - PullRequest
0 голосов
/ 01 сентября 2018

Я использую следующее регулярное выражение для следующего вида текста ниже

Регулярное выражение: [\s](rs|price)?([\s.]*\d+[\s\d.]*)(pkg|k|(?:la(?:c|kh|k)|crore|cr)s?|l)[\s.]

Текст: * * 1006

65 lac this is 55 lac. and more price 100 lac. randome text to test price45 crs. and 65 cr and to test its matching rs 3244 k like rs 55k. to its matchibg 65 cr. but not 65 cr als not matching price 123 lac more of it 55 crs.

Это не соответствует всей цене, упомянутой выше, но только немногим. Я сопоставляю цену, в которой есть пробелы до и после полного соответствия цен на регулярное выражение.

Я добавил [\s.] в конце, чтобы соответствовать ценам, которые также заканчиваются на. и есть пробелы после него. Например, 55 крон. или 24 лака. Точно так же я добавил '[\ s]', чтобы соответствовать только той цене, которая имеет место перед соответствующей ценой.

Выход:

https://regex101.com/r/iHamwk/1/

Пример вывода 2: https://regex101.com/r/h8NLhr/5

Пример вывода 3: https://regex101.com/r/h8NLhr/8

Как мне изменить вышеприведенное регулярное выражение?

Кроме того, как извлечь совпадающие цены, исключая пробелы до и после него?

Спасибо.

1 Ответ

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

Если вы хотите сопоставить цены, вы можете использовать чередование для соответствия различным форматам. Чтобы убедиться, что начальные цифры и значения в чередовании не являются частью более длинного соответствия, вы можете использовать границы слова \b. Чтобы также сопоставить дополнительную точку, вы можете добавить \.?

\b\d+\s*(?:lac|crs?|k)\b\.?

Regex demo

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

  • \b Граница слова
  • \d+ Совпадение с одной или несколькими цифрами
  • \s* Соответствует нулю или более раз символу пробела (или используйте [ ]* для соответствия нулю или более раз символу пробела. Квадратные скобки не являются необходимыми, но они предназначены только для удобства чтения)
  • (?:lac|crs?|k) Чередование, соответствующее lac, cr, crs или k
  • \b Граница слова
  • \.? Соответствует дополнительной точке
...