Найти, если текст содержит от 5 до 10 слов, написанных в верхнем регистре - PullRequest
2 голосов
/ 20 апреля 2019

Я делаю регулярное выражение, которое обнаруживает меня, когда текст содержит от 5 до 10 заглавных слов.В настоящее время мое регулярное выражение определяет, когда текст содержит менее 5 слов заглавными буквами, и когда он имеет +5 совпадений.Проблема возникает, когда у вас есть более 10, все еще давая матч:

Как я могу решить это?

(?:\b[A-Z]+\b.*){5,10}

1 Ответ

2 голосов
/ 20 апреля 2019

Этот шаблон (?:\b[A-Z]+\b.*){5,10} соответствует \b[A-Z]+\b, а затем .*, что будет соответствовать всем, кроме символа новой строки, поэтому без учета прописных слов.

Если вся строка должна содержать от 5 до 10 слов в верхнем регистре с границами слов, вы можете использовать временный жадный токен , повторенный 5-10 раз, и использовать отрицательный взгляд, чтобы утверждать, что находится на право не в верхнем регистре слово:

^(?:(?:(?!\b[A-Z]+\b).)*\b[A-Z]+\b){5,10}(?!.*\b[A-Z]+\b)

Regex demo

Объяснение

  • ^ Начало строки
  • (?: Группа без захвата
    • (?: Группа без захвата
      • (?!\b[A-Z]+\b). Отрицательный взгляд, подтвердите, что справа не \b[A-Z]+\b, затем сопоставьте любой символ, кроме новой строки, используя .
    • )* Закрыть группу без захвата и повторить 0+ раз
    • \b[A-Z]+\b Соответствует границе слова, 1+ раз в верхнем регистре A-Z и границе слова
  • ){5,10} Закрыть группу без захвата и повторить 5 - 10 раз
  • (?!.*\b[A-Z]+\b) Отрицательный взгляд, утверждай, что справа \b[A-Z]+\b нет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...