私はばかだと知っていますが、このメールアドレスからドメインを引き出すことはできません。
'[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]」
そのため、上記のすべての行に空白行があります。私は何が間違っているのですか?どうも。
これが役立つと思うものです
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つ以上。
この正規表現は、ピリオド文字と@
の後のすべての英数字に一致するため、文の途中でもメールドメインに一致します。
では、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()
正規表現の使用:
>>> re.search('@.*', test_string).group()
'@gmail.com'
別の方法:
>>> '@' + test_string.split('@')[1]
'@gmail.com'
以下の正規表現を使用して、.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']
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