RegEx для соответствия точно N числа - PullRequest
2 голосов
/ 09 мая 2019

У меня есть регулярное выражение

[\b\s\n\r\^][1-9][0-9]{3}[ -]?[0-9]{4}[\b\s]
с сайта https://regexr.com/

, но оно не распознает первые два числа в следующей группе

1 2 3 4 5 6 7 8 1 2 3 4 - 5 6 7 8

и он не должен идентифицировать недействительный.

Действительный

1 2 3 4 5 6 7 8 1 2 3 4 - 5 6 7 8 12345678 1234-1234

НЕВЕРНЫЙ

1-18000-55113 01234567 09581300 1234567

1 Ответ

1 голос
/ 09 мая 2019

Учитывая ваши образцы и глядя на вашу попытку регулярного выражения, вы можете использовать это регулярное выражение,

^[1-9] *(?:\d *){3}(?:- *)?(?:\d *){4}$

Пояснение:

  • ^ - начало строки
  • [1-9] * - начинается с цифры от 1 до 9, за которой следуют дополнительные пробелы (я)
  • (?:\d *){3} - сопровождается любой цифрой, за которой следуют дополнительные пробелы и все три раза
  • (?:- *)? - После сопоставления четырех цифр может произвольно указываться после дефиса - с последующими дополнительными пробелами
  • (?:\d *){4} - далее следуют еще четыре цифры, за которыми, возможно, следуют пробел (ы)
  • $ - конец строки

Regex Demo 1

Рабочая демонстрация в регулярном выражении

Edit: Как упоминалось в комментариях, если вы хотите найти такие строки в большем тексте, вы можете использовать следующее регулярное выражение,

\b[1-9] *(?:\d *){3}(?:- *)?(?:\d *){3}\d\b

Regex Demo 2

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