2011-01-13 10 views
1
 

#!/usr/bin/python 
import re 

str = raw_input("String containing email...\t") 
match = re.search(r'[\w.-][email protected][\w.-]+', str) 
if match: 
    print match.group() 

これは最も複雑なコードではありません。可能であれば、すべての一致を得る方法を探しています。Pythonと正規表現

+0

私は、Pythonを知らないが、perlですべての一致を得るために修飾子はので、多分R '[\ wの.-] + @ [\ wの.-] +' gが働くだろう、gです。 –

+0

私はあなたがすでにこれを認識していると確信していますが、その場合、正規表現はいくつかの有効な電子メールアドレスを逃して無効なアドレスを見つけるでしょう。 –

+0

どうすれば修正できますか?@マーク – tekknolagi

答えて

5

あなたがre.findall()をしたいように聞こえる:

findall(pattern, string, flags=0) 
    Return a list of all non-overlapping matches in the string. 

    If one or more groups are present in the pattern, return a 
    list of groups; this will be a list of tuples if the pattern 
    has more than one group. 

    Empty matches are included in the result. 

限りの電子メールアドレスを識別するための実際の正規表現が行くように... this questionを参照してください。

また、変数名にはstrを使用してください。これにより、strビルトインが非表示になります。

+1

+1変数名を識別するstr – Rozuur

1

あなたが探しているのはre.findallだと思います。

0

あなたはありません)(()()またはfindAllのに()

のfindAllを見つけるための試みを与える パターンのすべての出現、 検索などだけではなく、最初のものと一致する必要があります。例えば、もし一つは、彼または彼女は可能性があります 使用のfindAll()

http://docs.python.org/library/re.html#finding-all-adverbs

0
  • あなたはraw_input使用していない作家 だったし、いくつかのテキストで 副詞の全てを見つけたいですあなたが使った方法で。 raw_inputを使用してコンソールからの入力を取得するだけです。
  • strなどの組み込み関数をオーバーライドしないでください。意味のある名前を使用し、文字列全体の値を割り当てます。

  • また、文字列を一致させるRegexオブジェクトを持つパターンをコンパイルするには、何度も良いアイデアです。

を(コードに示されている)私はそれ以外の場合、このスニペットは有用であるべき完全な正規表現が正確RFC822 could be a pagefulに従って電子メールIDと一致することに気づきました。

import re 

inputstr = "[email protected], [email protected], [email protected], etc etc\t" 
mailsrch = re.compile(r'[\w\-][\w\-\.][email protected][\w\-][\w\-\.]+[a-zA-Z]{1,4}') 
matches = mailsrch.findall(inputstr) 
print matches 
+0

これは素晴らしいです - ありがとう! – tekknolagi