OpenRefine Regex和GREL匹配错误

时间:2016-07-05 17:08:45

标签: regex openrefine

内部openRefine我想在网站的源代码中运行以下正则表达式,该源代码可以找到带有mailto链接的电子邮件地址。我的麻烦是运行value.match时,我收到此错误:

  

偏移12处的解析错误:正则表达式错误(索引10附近的未闭合字符类。* mailto:[^ ^)

我已经在没有value.match的其他环境中测试了该表达式,并且它可以工作。

value.match(/.*mailto:[^/"/']*.com.*/)

2 个答案:

答案 0 :(得分:0)

isNotNull(value.match(/.*mailto:[^\"\']*.com.*/)) 

如我们的match()函数的参考页面所述,它返回RegEx模式中的捕获组数组,然后如果您的值类似于该模式,则isNotNull()输出True或False: https://github.com/OpenRefine/OpenRefine/wiki/GREL-String-Functions#matchstring-s-regexp-p

此处也有描述:https://github.com/OpenRefine/OpenRefine/wiki/Understanding-Regular-Expressions#basic-examples

你也可以使用我们维基上的食谱中所述的get(),但只有每个单元只有一个电子邮件地址才能正常工作(因为get()函数没有来自或来自的数字,做出假设和使用数组的长度来确定最后一个元素,并仅推出最后一个元素,而不是第一个元素或第三个元素,等等): https://github.com/OpenRefine/OpenRefine/wiki/Recipes#find-a-sub-pattern-that-exists-at-the-end-of-a-string

例如:

get(value.match(/.*(mailto:[^\"\']*.com).*/),0)

答案 1 :(得分:0)

所以如果你有这样的文字:

Blah blah <a href="mailto:j.bloggs@example.com">mail me</a>

要使用OpenRefine中的匹配功能提取电子邮件地址,您需要使用:

value.match(/.*mailto:([^\"\']*.com).*/)

这将给出一个包含电子邮件地址的数组,该地址使用捕获组捕获。要从数组中提取电子邮件地址(如果要将邮件地址存储在OpenRefine单元格中,则必须这样做),您需要从数组中获取字符串值。 e.g:

value.match(/.*mailto:([^\"\']*.com).*/)[0]

原始表达式与此表达式之间的区别在于字符是正确转义的,并且有一个捕获组 - 基本上是在上面的注释中实现@LukStorms的建议。