0

メールIDをキャッチするための正規表現を作成しようとしています。regexpal.comを使用してかなりの数時間からテストしています。このサイトでは、すべての電子メールIDをキャッチできます。Pythonで同じ正規表現を置き換えてre.findall(pattern、line)を実行すると、それをキャッチできません。

正規表現:

[a-zA-Z0-9-_]+[(.)?a-zA-Z0-9-_]*\s*(@|at)\s*[a-zA-Z0-9-_]+\s*(.|dot)\s*[a-zA-Z0-9-_]*\s*(.|dot)\s*e(\-)?d(\-)?u(\-)?(.,)?

例 :

Line =    <TR> <TD><B>E-Mail: </B> <TD><A HREF=MailTo:*example.young@stackoverflow.edu*\>*example.young@stackoverflow.edu*</A>

(regexpal.comで正しく強調表示されています)。

Pythonの場合:

 for line in f:
    print 'Line = ',line
        matches = re.findall(my_first_pat,line)
    print 'Matches = ',matches

出力を提供します:

Line =    <TR> <TD><B>E-Mail: </B> <TD><A HREF=MailTo:example.young@stackoverflow.edu>example.young@stackoverflow.edu</A>

Matches =  [('@', 'd', '.', '', '', '', ''), ('@', 'd', '.', '', '', '', '')]

どうした ?

4

2 に答える 2

1

のドキュメントを読むre.findall

パターンに1つ以上のグループが存在する場合は、グループのリストを返します

グループはアットマークやドットなどのみをキャプチャするため、re.findallによって返されるのはそれだけです。キャプチャしないグループを使用するか、全体をグループにラップするか、を使用しますre.finditer

(@Igor Chubinが指摘しているように、正規表現も.の代わりに誤って使用しています\.が、これが主な問題の原因ではありません。)

于 2012-07-26T07:05:31.690 に答える
0

ここでは使用し\.ない.でください:

(.|dot)

パーツ内の文字の間にハイフンを含めることができると言いたいだけの場合は、eduスラッシュやグループ化なしでこれを行うことができます。

e-?d-?u-?[.,]?

シンボルをグループ化するためだけに使用する場合()(ただし、キャプチャには使用しない場合)、(?:)代わりに次を使用する必要があります。

(?:@|at)
于 2012-07-26T07:04:10.993 に答える