Как правильно сопоставить только нужные цифры типа - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть пользовательская строка:

Code: 12345
Price: $4900,50

И два регулярных выражения для номеров совпадений:

  1. Регулярное выражение для номеров совпадений с фиксированной длиной: /[0-9]{4,6}/mg
  2. Регулярное выражение для чисел с плавающей точкой: /\d+(?:[.,]\d+)?/mg

В этом случае 1-е регулярное выражение должно соответствовать только 12345, но также найдено 4900, которое не требуется.

Демо 1-е регулярное выражение : https://regex101.com/r/jnhsly/2

2-е регулярное выражение должно содержать только число с плавающей точкой из строки. В этом примере строка должна быть найдена только 4900,50, но также найдена 12345, что не является необходимым результатом.

Демонстрация 2-го регулярного выражения : https://regex101.com/r/If9y6G/1

Как я могу найти только необходимые результаты в обоих регулярных выражениях в моем случае?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Только для случая 1 целых чисел, вы можете использовать это регулярное выражение:

(?<![\d.,])\d{4,6}\b(?![.,]\d)
  • (?<![\d.,]): убедитесь, что у нас нет ди git или , или . на предыдущей позиции
  • \b: граница слова
  • (?![.,]\d): убедитесь, что у нас нет , или . с последующим ди git на следующей позиции

RegEx Demo 1

Для случая 2 чисел с плавающей запятой вы можете использовать это регулярное выражение:

\d+[.,]\d+

Нет необходимости делать [.,]\d+ необязательным, поскольку вы здесь сопоставляете только числа с плавающей запятой.

RegEx Demo 2

1 голос
/ 08 апреля 2020

Чтобы соответствовать целым числам, содержащим от 4 до 6 цифр, вам нужно использовать

(?<!\d)(?<!\d[.,])\d{4,6}(?![,.]?\d)

См. Демо regex

Подробности

  • (?<!\d) - без ди git разрешено сразу слева
  • (?<!\d[.,]) - без ди git и . или , допускается немедленно на слева
  • \d{4,6} - четыре, пять или шесть цифр
  • (?![,.]?\d) - не обязательно , или ., а справа git допускается сразу *. 1027 *

Шаблон \d+(?:[.,]\d+)? соответствует целочисленным значениям или значениям с плавающей запятой, поскольку группа без захвата необязательная , благодаря квантификатору ?, удалите его. Тогда вся не захватывающая группа будет избыточной, поэтому шаблон для сопоставления с плавающими значениями станет \d+[.,]\d+.

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