#regex
#регулярное выражение
Вопрос:
Я пишу регулярное выражение для сопоставления любых чисел, запятых, точек, за исключением случаев, когда они находятся в конце числа.
Вот пример того, что у меня есть до сих пор:
/([0-9] [., ]*) /
Это уже довольно хорошо, потому что оно соответствует тому, что я хочу. Единственная проблема заключается в том, что оно также соответствует ‘ ‘ или ‘,’ ‘.’ в конце выражения.
Допустим, у меня есть эта строка:
The cost of the food was 1 999,49 € without drinks.
Я хочу сопоставить 1 999,49
строку. Прямо сейчас мое регулярное выражение соответствует 1 999,49
. То же самое должно произойти, если формат цены отличается, например:
1,999.49 $ => 1,999.49 (with no whitespace or anything in the end)
Как я могу сделать это с помощью регулярных выражений?
Ответ №1:
Вы можете использовать шаблон для первого сопоставления цифр и, при необходимости, для сопоставления пробела, запятой или точки, за которыми следует цифра 1 , чтобы точка-запятая или пробел не могли быть в конце.
d (?:[,. ]d )*
d
Сопоставление 1 цифр(?:
Не группа захвата[,. ]d
Сопоставьте либо пробел,
, либо.
и 1 цифры
)*
Закройте группу и повторите 0 раз
Демонстрация регулярных выражений
Немного более точное соответствие может быть
bd{1,3}(?:[,. ]d{3})*(?:[.,]d{2})?b
Комментарии:
1. Спасибо, первый, похоже, работает довольно хорошо. Что мне нужно сделать, если я хочу разрешить
.
быть в конце, но не хочу запятых или пробелов? Это выглядит нормально?d (?:[, ]d )*([.])*
2. @Radical_Activity Тогда вы могли бы рассмотреть шаблон, подобный
bd{1,3}(?:[,. ]d{3})*(?:.d{2})?b
3. Спасибо. Возможно ли это сделать с первой формулой?
d (?:[,. ]d )*
4.@Radical_Activity Для сопоставления только цифр или части с запятой и точкой в конце
d (?:(?:[, ]d ) (?:.d ))?
regex101.com/r/vTbjLu/1