web-dev-qa-db-ja.com

Python正規表現、アドレスでメールドメインを検索

私はばかだと知っていますが、このメールアドレスからドメインを引き出すことはできません。

'[email protected]'

私の希望する出力:

'@gmail.com'

私の現在の出力:

.

(これは単なるピリオド文字です)

これが私のコードです:

import re
test_string = '[email protected]'
domain = re.search('@*?\.', test_string)
print domain.group()

これが私の正規表現が言うことだと思います( '@ *?。'、test_string):

 ' # begin to define the pattern I'm looking for (also tell python this is a string)

  @ # find all patterns beginning with the at symbol ("@")

  * # find all characters after ampersand

  ? # find the last character before the period

  \ # breakout (don't use the next character as a wild card, us it is a string character)

  . # find the "." character

  ' # end definition of the pattern I'm looking for (also tell python this is a string)

  , test string # run the preceding search on the variable "test_string," i.e., '[email protected]'

私はこれをここでの定義に基づいています:

http://docs.activestate.com/komodo/4.4/regex-intro.html

また、検索しましたが、他の答えは少し難しすぎて頭を動かすことができませんでした。

いつものように、助けていただければ幸いです。ありがとう。

それが重要な場合は私のもの:

Windows 7 Pro(64ビット)

Python 2.6(64ビット)


PS。 StackOverflow quesiton:投稿の間に「return」を2回押しない限り、投稿に新しい行が含まれません。たとえば(私が投稿しているとき、これらはすべて別の行にあります):

@-アットマーク( "@")で始まるすべてのパターンを検索します*-アンパサンドの後のすべての文字を検索しますか? -ピリオドの前の最後の文字を検索します\-ブレークアウト(次の文字をワイルドカードとして使用しないでください。文字列文字です)。 - を見つける "。"文字、テスト文字列-変数「test_string」で前述の検索を実行します。つまり、「[email protected]

そのため、上記のすべての行に空白行があります。私は何が間違っているのですか?どうも。

16

これが役立つと思うものです

import re
s = 'My name is Conrad, and [email protected] is my email.'
domain = re.search("@[\w.]+", s)
print domain.group()

出力

@gmail.com

正規表現の仕組み:

@-この文字が表示されるまでスキャンします

[\w.]一致する可能性のある文字のセット。したがって、\wはすべて英数字であり、末尾のピリオド.はその文字のセットに追加されます。

+前のセットの1つ以上。

この正規表現は、ピリオド文字と@の後のすべての英数字に一致するため、文の途中でもメールドメインに一致します。

21
Conrad.Dean

では、splitを使用してみませんか? (またはパーティション)

"@"+'[email protected]'.split("@")[-1]

または、findなどの他の文字列メソッドを使用できます

>>> s="[email protected]"
>>> s[ s.find("@") : ]
'@gmail.com'
>>>

他のテキストからメールアドレスを抽出する場合

f=open("file")
for line in f:
    words= line.split()
    if "@" in words:
       print "@"+words.split("@")[-1]
f.close()
14
kurumi

正規表現の使用:

>>> re.search('@.*', test_string).group()
'@gmail.com'

別の方法:

>>> '@' + test_string.split('@')[1]
'@gmail.com'
6
chrisaycock

以下の正規表現を使用して、.comや.inなどの任意のドメインを抽出できます。

import re
s = 'my first email is [email protected] second email is enter code [email protected] and third email is [email protected]'
print(re.findall('@+\S+[.in|.com|]',s))

出力

['@gmail.com', '@yahoo.in']
2
Alok Choudhary

Chrisaycockのメソッドがフォームの無効なメールアドレスと一致することを指摘したかっただけです

herp@

有効な可能性のあるメールとドメインを正しく照合するには、少し変更する必要があります

正規表現の使用:

>>> re.search('@.+', test_string).group()
'@gmail.com'

インデックス関数を使用する別の方法を次に示します。

email_addr = '[email protected]'

# Find the location of @ sign
index = email_addr.index("@")

# extract the domain portion starting from the index
email_domain = email_addr[index:]

print(email_domain)
#------------------
# Output:
@gmail.com
0
Stryker