Совпадение фраз в Regex, исключая ключевые слова - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь использовать Regex для возврата совпадений по следующим критериям:

  • Слова, содержащие специальные символы, не совпадают.
  • Ключевые слова И и ИЛИ не совпадают.
  • Слова с одним пробелом и любые слова после этого, например -

    'lorem Ipsum - просто дурак И текст печати'

Выше должны возвращаться следующие совпадения:

  • Lorem Ipsum
  • Ipsum
  • это просто
  • просто дурачок
  • текст
  • из
  • печать

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

Это регулярное выражение сопоставляет слова и их пробелы, но шаблон не переходит к следующему слову.

(\w*[^OR|^AND] [^OR|^AND]\w*)

Выражение очень близко, но оно не возвращает все мои желаемые совпадения, как указано выше, что я пропускаю?

1 Ответ

1 голос
/ 27 апреля 2019

В вашем шаблоне вы используете отрицательный класс символов [^OR|^AND], который не будет соответствовать ни одному из перечисленных символов, поэтому он будет соответствовать любому символу, кроме ADNOR|^

Если lookaheads и поддерживаются группы захвата , вы можете использовать комбинацию положительного взгляда, чтобы утверждать, что справа два слова, и утверждать, используя отрицательный взгляд, что то, что прямо справа, не является либо OR, либо AND.

Для сопоставления слов вы можете сопоставить символы слова, используя \w+

Ваше совпадение будет в первой группе захвата.

(?=(\b(?!(?:AND|OR)\b)\w+ (?!(?:AND|OR)\b)\w+\b))

Объяснение

  • (?= Позитивный взгляд вперед, утверждают, что прямо справа есть
    • ( Группа захвата 1
      • \b(?!(?:AND|OR)\b) Граница слова и утверждение, что непосредственно направо не И / ИЛИ
    • \w+ Совпадение с 1+ символами слова, за которыми следует пробел
    • (?! Отрицательный взгляд вперед, утверждают, что находится прямо справане
      • (?:AND|OR)\b)\w+\b Совпадение И / ИЛИ, затем граница слова, 1+ символов слова и граница слова
    • ) Закрыть первую группу захвата
  • ) Закрыть позитивный прогноз

Regex demo

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