Найти слова между 2 не включает слова в результатах с регулярным выражением - PullRequest
0 голосов
/ 20 февраля 2019

Я попытался найти решение, но не смог.

Регулярное выражение, которое выбирает все слова длиной более 3 символов между словами "(Dd) og (s)" и "(Cc) at (s).)».Использование регулярных выражений.слова "(Dd) og (s)" и "(Cc) at (s)" не должны быть включены в результат в Java.Я нашел:

(?<=(^?\b[Dd]ogs?\b\s?|^?\b[Cc]ats?\b\s?)).*(\b[a-zA-Z']{4,}\b)*(?=(\b[Dd]ogs?\b\s|\b[Cc]ats?\b\s))

Это работает, но дает слова из 3 и менее символов.

1 Ответ

0 голосов
/ 23 февраля 2019

Так как в шаблоне в комментариях (?i)((?<=(^?dogs? |^?\s?cats? ))(.*?)(?=(dogs?|cats?))) вы используете положительный взгляд сзади и положительный взгляд вперед, чтобы совпасть с кошкой или собакой, и из этого вам нужно получить только слова длиной более 4 символов, вы можете использовать \G который подтверждает конец предыдущего совпадения.

Например:

(?:\b(?:dog|cat)s?|\G)\s+(?:((?!(?:dog|cat)s?\b)\w{3,})|\S+)(?=.*?\s+(?:dog|cat)s?\b)

В Java:

String regex = "(?:\\b(?:dog|cat)s?|\\G)\\s+(?:((?!(?:dog|cat)s?\\b)\\w{3,})|\\S+)(?=.*?\\s+(?:dog|cat)s?\\b)";

См. демонстрационную версию regex | Демонстрация Java

Объяснение

  • (?: Группа без захвата
    • \b(?:dog|cat)s? Граница слова, соответствует либособака или кошка с дополнительным s
    • | или
    • \G Утверждение позиции в конце предыдущего матча
  • )Закрыть группу без захвата
  • \s+ Совпадение с 1 + пробелами
  • (?: Группа без захвата
    • ( Группа захвата
      • (?!(?:dog|cat)s?\b)\w{3,}Отрицательный взгляд, чтобы проверить то, что следует, не собака или кошка с дополнительными s.Если это так, то сопоставьте 3+ раза слово char
    • ) Закрыть группу захвата
    • | или
    • \S+ Совпадение 1+ непробельных символов, поскольку мы не можем сопоставить \w{3,}
  • ) Закрыть группу без захвата
  • (?=.*?\s+(?:dog|cat)s?\b) Позитивный взгляд вперед, чтобы утверждать, что происходитправо - собака или кошка с дополнительным s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...