Найти первый набор из 5 цифр в тексте - PullRequest
3 голосов
/ 19 июня 2019

Мне нужно найти первый набор из 5 чисел в тексте, подобном этому:

;SUPER U CHARLY SUR MARNE;;;rte de Pavant CHARLY SUR MARNE Picardie 02310;Charly-sur-Marne;;;02310;;;;;;;;;;;;;;

Мне нужно найти только первую 02310.

Мое регулярное выражение, но он нашел весь набор из 5 чисел:

([^\d]|^)\d{5}([^\d]|$)

Ответы [ 3 ]

1 голос
/ 19 июня 2019

Для совпадения с первым 5-значным числом вы можете использовать

^.*?\K(?<!\d)\d{5}(?!\d)

См. Демоверсию regex . Если вы хотите удалить совпадение, просто оставьте поле Заменить на пустым. ^ соответствует началу строки, .*? соответствует любым 0+ символам, кроме символов разрыва строки, как можно меньше, а оператор \K отбрасывает сопоставленный текст. Затем (?<!\d)\d{5}(?!\d) соответствует 5 цифрам, не заключенным в другие цифры.

Другой вариант включает в себя группу захвата / обратную ссылку:

Найти что : ^(.*?)(?<!\d)\d{5}(?!\d)
Заменить на : $1

См. это демо регулярных выражений .

Здесь вместо отбрасывания найденного текста до номера (.*?) записывается в группу 1, а $1 в шаблоне замены возвращает его обратно.

0 голосов
/ 19 июня 2019

Я бы использовал

(^(?:(?!\d{5}).)+)(\d{5})(?!\d)

Находит фрагмент от начала строки до конца первого 5-значного числа, но в случае замены вы можете использовать $1 или $2 для замены соответствующей части. Например, замена $1<$2> будет окружать число < и >.

0 голосов
/ 19 июня 2019

Чтобы найти первые 5 цифр в тексте, вы также можете указать не цифру \D* или 1-4 цифры, а затем 5 цифр:

^(?=.*\b\d{5}\b)(?:\D*|\d{1,4})*\K\d{5}(?!\d)
  • ^ Начало строки
  • (?=.*\b\d{5}\b) Утверждение, что между границами слова есть 5 последовательных цифр
  • (?:\D*|\d{1,4})* Повторить сопоставление 0+ раз, а не цифру или 1-4 цифры
  • \K\d{5} Забудьте, что было найдено, затем сопоставьте 5 цифр
  • (?!\d) Утверждение, что следовало не цифра

Regex demo

...