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



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

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

()
()

脚本语法有问题吗?

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

感谢您的帮助,谢谢。

用于以下输入数据

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

代码的输出是

.123 .com
     .com

所以你的代码中有几个问题

  1. 您需要在整个正则表达式周围添加括号以捕获完整的电子邮件地址。 然后,如果每行中只有一个标记(单词或电子邮件ID),则代码应该可以工作

  2. 如果每个输入行都可以是一个句子,那么您必须首先进行标记化,然后在标记上进行正则表达式匹配。

您拥有的正则表达式仅适用于令牌而不是在线的原因是"^"表示字符串的开头,"$"表示字符串的结尾,因此只有当整行都是电子邮件 ID 时,匹配才会成功,这意味着您每行只能有一个令牌。

最新更新