首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRefine正则表达式和GREL匹配误差

OpenRefine正则表达式和GREL匹配误差
EN

Stack Overflow用户
提问于 2016-07-05 17:08:44
回答 2查看 971关注 0票数 0

openRefine内部,我想在一个网站的源上运行下面的regex,它可以找到带有mailto链接的电子邮件地址。我的问题是,当运行value.match时,我会得到以下错误:

在偏移量12处解析错误:糟糕的正则表达式(索引10 .*mailto:[^ ]附近的未封闭字符类)

我已经在没有value.match的另一个环境中测试了这个表达式,它可以工作。

代码语言:javascript
复制
value.match(/.*mailto:[^/"/']*.com.*/)
EN

回答 2

Stack Overflow用户

发布于 2016-07-05 20:16:28

代码语言:javascript
复制
isNotNull(value.match(/.*mailto:[^\"\']*.com.*/)) 

正如在match()函数的参考页面中所描述的,它返回RegEx模式中的捕获组数组,如果您的值与该模式相同,则isNotNull()将输出真或假。

这里还描述了:https://github.com/OpenRefine/OpenRefine/wiki/Understanding-Regular-Expressions#basic-examples

您也可以使用get(),如这里在我们的wiki上的累赘描述,但只有在每个单元格只有一个电子邮件地址的情况下才能正常工作(因为get()函数没有编号,可以进行假设,并使用数组的长度来确定最后一个元素,而不是第一个或第三个元素,等等):https://github.com/OpenRefine/OpenRefine/wiki/Recipes#find-a-sub-pattern-that-exists-at-the-end-of-a-string

例如:

代码语言:javascript
复制
get(value.match(/.*(mailto:[^\"\']*.com).*/),0)
票数 0
EN

Stack Overflow用户

发布于 2016-07-07 08:27:32

所以如果你有这样的短信:

代码语言:javascript
复制
Blah blah <a href="mailto:j.bloggs@example.com">mail me</a>

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

代码语言:javascript
复制
value.match(/.*mailto:([^\"\']*.com).*/)

这将提供一个包含电子邮件地址的数组,该地址是使用捕获组捕获的。要从数组中提取电子邮件地址(如果要将邮件地址存储在OpenRefine单元中是必要的),需要从数组中获取字符串值。例如:

代码语言:javascript
复制
value.match(/.*mailto:([^\"\']*.com).*/)[0]

原始表达式和这个表达式的不同之处在于,字符被正确转义,并且有一个捕获组--基本上实现了上面注释中@LukStorms的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38208988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档