2013-09-12 4 views
2

Я пытаюсь извлечь данные электронной почты из необработанного текста, используя свиньи.Свинья: извлечение электронной почты из исходного текста с помощью REGEX

Вот образец данных:

Sample data for email [email protected] 
Sample data for email [email protected] 

Я пытаюсь с помощью метода 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; 

После сброса вывод в терминал, я получаю пустой выход:

() 
() 

Есть ли проблемы в синтаксисе скрипта?

Пожалуйста, поделитесь некоторыми ссылками также относительно написания регулярных выражений, было бы очень полезно.

Ваша помощь приветствуется, спасибо.

ответ

2

Для следующих входных данных

[email protected] 
[email protected] 

Вывод кода является

.123 .com 
    .com 

Итак, есть несколько проблем в коде

  1. Вы должны добавить круглые скобки вокруг целое регулярное выражение, чтобы захватить полный адрес электронной почты. Затем код должен работать, если у вас есть только один токен (слово или адрес электронной почты) в каждой строке.

  2. Если каждая строка ввода может быть предложением, тогда вы должны сначала указать tokenize, а затем на маркеры вы можете сделать регулярное выражение совпадение.

Причина, по которой регулярное выражение у вас есть работает только на маркер, а не по линии «^» указывает на начало строки и «$» означает конец строки, так что матч будет успешным только тогда, когда вся line - это идентификатор электронной почты, что означает, что вы можете иметь только один токен в строке.

+0

Hi Manish! Вы должны принять ответ @ Bharat, если он вам полезен (похоже, что это было, поскольку у вас не было никаких дополнительных вопросов для него) (и также мне кажется правильным) – Eyal

Смежные вопросы