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

时间:2013-09-12 09:07:11

标签: regex apache-pig

我正在尝试使用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;

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

()
()

脚本语法有问题吗?

请分享关于正则表达式写作的一些链接,这将非常有帮助。

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

用于跟踪输入数据

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

您的代码输出

.123 .com
     .com

因此您的代码中存在一些问题

  1. 您需要在整个正则表达式周围添加括号以捕获完整的电子邮件地址。如果每行只有一个令牌(word或email-id)

  2. ,则代码应该有效
  3. 如果每个输入行都可以是一个句子,那么您必须先tokenize然后在令牌上才能进行正则表达式匹配。

  4. 你所使用的正则表达式仅适用于令牌但不在线的原因是“^”表示字符串的开头而“$”表示字符串的结尾,所以只有当整行是电子邮件时匹配才会成功-id表示每行只能有一个令牌。