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

时间:2019-01-26 20:26:29

标签: regex grel

我正在使用OpenRefine解析具有字符串值的列。 我想找到包含以下两个单元的单元:要约或折扣。 字符串值通常是一个句子

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

value.match(/.*(优惠)|(折扣)/)

1 个答案:

答案 0 :(得分:0)

我在documentation中看到的是.match函数试图将整个字符串s与正则表达式模式p匹配,并返回捕获组数组

要同时匹配其中一个而不匹配两者,可以使用正数lookahead和负数alternation

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

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

这将匹配

  • (?:非捕获组
    • (?!.*\bdiscount\b).*\boffer\b.*断言右边没有折扣,并且匹配任何字符和要约
    • |
    • (?!.*\boffer).*\bdiscount\b.*或主张相反的意思
  • )关闭非捕获组