регулярное выражение с соответствием в GREL / openrefine - PullRequest
0 голосов
/ 26 января 2019

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

Мой код ниже использует функцию соответствия, не работает.использование value.contains () ограничено поиском только одного слова.

value.match (/.* (предложение) | (скидка) /)

1 Ответ

0 голосов
/ 26 января 2019

Что я вижу в документации , так это то, что функция .match Пытается полностью сопоставить строку s с шаблоном регулярных выражений p и возвращает массив групп захвата .

Для соответствия одному из них, но не обоим, вы можете использовать положительный и отрицательный lookahead , если это поддерживается.

Чтобы сопоставить любой из вариантов, используйте чередование , чтобы убедиться, что одно из слов есть, а другое нет, и наоборот:

(?:(?!.*\bdiscount\b).*\boffer\b.*|(?!.*\boffer).*\bdiscount\b.*)

Regex demo

Это будет соответствовать

  • (?: Группа без захвата
    • (?!.*\bdiscount\b).*\boffer\b.* Утверждают, что справа нет скидок и сопоставляют любые символы и предложения
    • | или
    • (?!.*\boffer).*\bdiscount\b.* Или утверждать обратное
  • ) Закрыть группу без захвата
...