我正在尝试使用pig从原始文本中提取电子邮件详细信息。
以下是样本数据:
Sample data for email abc.123@gmail.com
Sample data for email xyz@abc.com
我正在尝试使用REGEX方法,正则表达式来自: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;
将输出转储到终端后,我输出空白:
()
()
脚本语法有问题吗?
请分享关于正则表达式写作的一些链接,这将非常有帮助。
感谢您的帮助,谢谢。
答案 0 :(得分:2)
用于跟踪输入数据
abc.123@gmail.com
xyz@abc.com
您的代码输出
.123 .com
.com
因此您的代码中存在一些问题
您需要在整个正则表达式周围添加括号以捕获完整的电子邮件地址。如果每行只有一个令牌(word或email-id)
如果每个输入行都可以是一个句子,那么您必须先tokenize然后在令牌上才能进行正则表达式匹配。
你所使用的正则表达式仅适用于令牌但不在线的原因是“^”表示字符串的开头而“$”表示字符串的结尾,所以只有当整行是电子邮件时匹配才会成功-id表示每行只能有一个令牌。