我正在使用python,我希望能够保留电子邮件的域名,但删除'com',或'.co.uk',或'我们'等
所以基本上如果我有一封电子邮件,请说random@gmail.com。我希望只有@gmail以字符串格式保留,但我想为任何电子邮件执行此操作。所以random@yahoo.com会留下我@yahoo,或者random@aol.uk,会留给我@aol
到目前为止,我有: domain = re.search("@[\w.]+", val)
domain = domain.group()
返回域但使用TLD。所以@ gmail.com,或@ aol.co
答案 0 :(得分:3)
如果你这样做
val = string.split('@')[1].split('.')[0]
更改'字符串'为您的电子邮件字符串变量名称。
这将取决于' @'符号,然后是第一个'。'
的所有内容使用on' random@gmail.com'给出了' gmail'
如果您需要' @'您可以将其添加回来的符号;
full = '@' + val
答案 1 :(得分:2)
首先拆分" @",在" @"之后取出部分。然后拆分"。"并采取第一部分
email = "this.that@gmail.com.x.y"
'@' + email.split("@")[1].split(".")[0]
'@gmail'
答案 2 :(得分:1)
df = pd.DataFrame({'a':['random@yahoo.com','random@aol.uk','random@aol.co.uk']})
print (df)
a
0 random@yahoo.com
1 random@aol.uk
2 random@aol.co.uk
print ('@' + df.a.str.split('@').str[1].str.split('.', 1).str[0] )
0 @yahoo
1 @aol
2 @aol
Name: a, dtype: object
但如果在列中不是apply
值,则使用NaN
会更快:
df = pd.concat([df]*10000).reset_index(drop=True)
print ('@' + df.a.str.split('@').str[1].str.split('.', 1).str[0] )
print (df.a.apply(lambda x: '@' + x.split('@')[1].split('.')[0]))
In [363]: %timeit ('@' + df.a.str.split('@').str[1].str.split('.', 1).str[0] )
10 loops, best of 3: 79.1 ms per loop
In [364]: %timeit (df.a.apply(lambda x: '@' + x.split('@')[1].split('.')[0]))
10 loops, best of 3: 27.7 ms per loop
使用extract
的另一个解决方案比split
更快,如果列中的NaN
值可以使用它:
#not sure with all valid characters in email address
print ( '@' + df.a.str.extract(r"\@([A-Za-z0-9_]+)\.", expand=False))
In [365]: %timeit ( '@' + df.a.str.extract(r"\@([A-Za-z0-9 _]+)\.", expand=False))
10 loops, best of 3: 39.7 ms per loop
答案 3 :(得分:0)
对于后代和完整性,这也可以通过索引和切片来完成:
email = 'random@aol.co.uk'
at = email.index('@')
dot = email.index('.', at)
domain = email[at:dot]
当目标是提取单个子字符串时,使用split()
和re
似乎有些过分。