-4

私はファイルタイプからあらゆるタイプの電子メールを収集するためのアプリケーションを開発しました:ishani@dolly.lk ishani(at)dit.dolly.lk ishani at cs dot dolly dot edu

しかし、問題は、抽出された完全な電子メール以外のリストにいくつかの余分なアイテムが表示される出力です。私はそれがなぜなのか理解できません。いろいろ試してみましたが、正規表現や論理に問題があると思います

これが私のコードです

data=f.read()

    regexp_email = r'(([\w]+)@([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\(at\))([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\sat\s)([\w-]+)(\sdot\s)([\w]+(\sdot\s[\w]+)))'
    pattern = re.compile(regexp_email)
    emailAddresses = re.findall(pattern, data)

    print emailAddresses

出力は次のようになります

[('ishani@sliit.lk', 'ishani', 'sliit', '.', 'lk', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu')]

しかし、私はこのような出力を期待しています

['ishani@dolly.lk','ishani(at)dit.dolly.lk','ishani at cs dot dolly dot edu']

私の問題をサポートする誰かが試した方法はありますか?

4

2 に答える 2

0

これに変更regexp_emailします:

r'[\w]+@[\w]+[.][\w]+[\w.]+|[\w]+\(at\)[\w]+[.][\w]+[\w.]+|[\w]+\sat\s[\w-]+\sdot\s[\w]+\sdot\s[\w]+'

キャプチャグループは必要ないようですので、すべて削除しました。

指定する必要があるのがすべてである場合も、[]周りは必要ありません。\w\w

r'\w+@\w+[.]\w+[\w.]+|\w+\(at\)\w+[.]\w+[\w.]+|\w+\sat\s[\w-]+\sdot\s\w+\sdot\s\w+'
于 2013-03-06T17:14:31.443 に答える
-1

あなたはただ空白をスキップすることができます

print [e for ea in emailAddresses for e in ea if e]

を生成します

['ishani@sliit.lk', 'ishani', 'sliit', '.', 'lk', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu']

これはあなたが求めていたものではありません...

于 2013-03-06T17:14:06.410 に答える