Сопоставьте все виды цен в тексте с использованием регулярных выражений
Я использую следующее регулярное выражение для следующего вида текста ниже
Regex: [\s](rs|price)?([\s.]*\d+[\s\d.]*)(pkg|k|(?:la(?:c|kh|k)|crore|cr)s?|l)[\s.]
Текст:
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 Crs. или 24 лака. Точно так же я добавил '[\s]', чтобы соответствовать только той цене, которая имеет место перед соответствующей ценой.
Выход:
https://regex101.com/r/iHamwk/1/
Пример вывода 2: https://regex101.com/r/h8NLhr/5
Пример вывода 3: https://regex101.com/r/h8NLhr/8
Как мне изменить вышеприведенное регулярное выражение?
Кроме того, как извлечь сопоставимые цены, исключая пробелы до и после него?
Благодарю.
1 ответ
Если вы хотите соответствовать ценам, вы можете использовать чередование для соответствия различным форматам. Чтобы убедиться, что начальные цифры и значения в чередовании не являются частью более длинного соответствия, вы можете использовать границу слова \b
, Чтобы также соответствовать необязательной точке, вы можете добавить \.?
\b\d+\s*(?:lac|crs?|k)\b\.?
Это будет соответствовать:
\b
Граница слова\d+
Совпадение с одной или несколькими цифрами\s*
Совпадение ноль или более раз за пробел (или использование[ ]*
совпадать ноль или более раз с пробелами. Квадратные скобки не обязательны, но предназначены только для удобства чтения)(?:lac|crs?|k)
Чередование, совпадающее с lac, cr, crs или k\b
Граница слова\.?
Подберите необязательную точку