Ищем шаблон Regex для максимальных совпадений - PullRequest
1 голос
/ 15 апреля 2019

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

Например, сопоставьте буквенно-цифровую строку длиной 6-12 символов и содержит минимум 2 , но НЕ БОЛЬШЕ 4 , заглавные буквы, независимо от каждой из их позиций в строке.

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

^([A-Z]{2,4}).{8,12}$

Допустимые совпадения:

HamBurger (2 uppercase, Length = 9)
LeTtUce (3 uppercase, Length = 7)
TACOss (4 uppercase, Length = 6)

Но недопустимые совпадения будут:

ABCDE1234 (too many uppercase letters)
aBcDeFgHiJ (too many uppercase letters)
ADBC (length too short)

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 15 апреля 2019

Вы можете использовать решение на основе прогнозирования, например

^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$

или, чтобы сделать его более упорядоченным, переместите проверку длины в начало (в просмотр):

^(?=.{6,12}$)(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$

Смотрите regex demo (или this ) и Regulex graph :

enter image description here

Подробности

  • ^ - начало строки
  • (?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$) - положительный прогноз, требующий от двух до четырех повторений 0+ символовкроме заглавных букв, за которыми следуют заглавные буквы, а затем любые 0+ символов, кроме заглавных букв, до конца строки
  • .{6,12} - от 6 до 12 символов
  • $ - конецстроки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...