pig:使用regex从原始文本中提取电子邮件详细信息

3okqufwl  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(421)

我试图提取电子邮件的细节,从原始文本使用Pig。
以下是示例数据:

Sample data for email abc.123@gmail.com
Sample data for email xyz@abc.com

我正在尝试正则表达式方法,正则表达式取自:http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/
剧本如下:

A = Load '----' using PigStorage as (value: chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(value, '^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z]{2,})$')) AS (f1: chararray)
dump B;

将输出转储到终端后,我得到的是空白输出:

()
()

脚本语法有问题吗?
请分享一些关于正则表达式写作的链接,这将非常有帮助。
谢谢你的帮助,谢谢。

olhwl3o2

olhwl3o21#

用于以下输入数据

abc.123@gmail.com
xyz@abc.com

代码的输出是

.123 .com
     .com

所以你的代码中有几个问题
您需要在整个正则表达式周围添加括号来捕获完整的电子邮件地址。如果每行中只有一个标记(单词或电子邮件id),那么代码应该可以工作
如果每个输入行都可以是一个句子,那么您必须首先标记化,然后在标记上进行regex匹配。
您使用的regex只在token上工作而不在line上的原因是“^”表示字符串的开头,“$”表示字符串的结尾,因此只有当整行都是email id时匹配才会成功,这意味着每行只能有一个token。

相关问题