【问题标题】:regex with match in GREL/OpenRefine在 GREL/OpenRefine 中匹配的正则表达式
【发布时间】:2019-01-26 20:26:29
【问题描述】:

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

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

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

【问题讨论】:

  • 答案对你有用吗?
  • 是的。非常感谢!。我是stackoverflow的新手,我想谢谢你,但说明说不要回复谢谢......无论如何......我做了一些小改动: value.match(/.*((\boffer\b)|( \bdiscount\b)).*/)。我用一个括号加入了两个组。

标签: regex openrefine grel


【解决方案1】:

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

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

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

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

Regex demo

这将匹配

  • (?:非捕获组
    • (?!.*\bdiscount\b).*\boffer\b.* 断言右边没有折扣并匹配任何字符和报价
    • |或者
    • (?!.*\boffer).*\bdiscount\b.* 或断言相反
  • )关闭非捕获组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2011-05-01
    相关资源
    最近更新 更多