Регулярное выражение с соответствием в GREL/openrefine

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

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

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

1 ответ

Решение

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

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

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

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

Regex demo

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

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