在 GREL/OpenRefine 中匹配的正则表达式

regex with match in GREL/OpenRefine

我正在使用 OpenRefine 解析具有字符串值的列。 我想找到包含报价或折扣的单元格。 字符串值通常是一句话

我下面的代码使用的匹配功能不起作用。 使用 value.contains() 仅限于搜索一个词。

value.match(/.*(offer)|(discount)/)

我在 documentation 中看到的是 .match 函数 尝试将整个字符串 s 与正则表达式模式 p 和 returns 进行匹配一组捕获组.

要匹配其中一个而不匹配两者,您可以使用正数和负数 lookahead(如果支持)。

要匹配任一选项,请使用 alternation 确保其中一个单词存在而另一个不存在,反之亦然:

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

Regex demo

那将匹配

  • (?:非捕获组
    • (?!.*\bdiscount\b).*\boffer\b.*断言右边是无折扣匹配任意字符和offer
    • |
    • (?!.*\boffer).*\bdiscount\b.* 或者相反
  • )关闭非捕获组