2

豚を使用して生のテキストから電子メールの詳細を抽出しようとしています。

サンプルデータは次のとおりです。

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;

出力を端末にダンプした後、空白の出力が得られます。

()
()

スクリプトの構文に問題はありますか?

正規表現の記述に関してもいくつかのリンクを共有してください。非常に役立ちます。

あなたの助けに感謝します、ありがとう。

4

1 に答える 1

2

次の入力データの場合

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

コードの出力は

.123 .com
     .com

したがって、コードにはいくつかの問題があります

  1. 完全な電子メール アドレスを取得するには、正規表現全体を括弧で囲む必要があります。各行にトークン (単語または電子メール ID) が 1 つしかない場合、コードは機能するはずです。

  2. 各入力行が文になる可能性がある場合は、最初にトークン化する必要があり、次にトークンで正規表現一致を行うことができます。

あなたが持っている正規表現が行ではなくトークンでのみ機能する理由は、「^」が文字列の先頭を示し、「$」が文字列の末尾を示すため、行全体が電子メール ID である場合にのみ一致が成功します。は、1 行に 1 つのトークンしか持てないことを意味します。

于 2013-09-12T21:10:33.517 に答える