Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以用Python解析一个列表,将域名从同一字段中包含多个电子邮件和分隔符的电子邮件中分离出来吗?_Python - Fatal编程技术网

我可以用Python解析一个列表,将域名从同一字段中包含多个电子邮件和分隔符的电子邮件中分离出来吗?

我可以用Python解析一个列表,将域名从同一字段中包含多个电子邮件和分隔符的电子邮件中分离出来吗?,python,Python,我意识到这可能是一个基本问题,但如果有任何帮助,我将不胜感激 我需要唯一的域值和电子邮件 当前示例字段: ['email@domain.com ; email2@domain.com ; email3@domain2.com'] 需要: ['domain.com | domain2.com'] 或 如果容易的话 谢谢我拿了一个列表作为输入 emails = ['email@domain.com ; email2@domain.com ; email3@domain2.com'] email

我意识到这可能是一个基本问题,但如果有任何帮助,我将不胜感激

我需要唯一的域值和电子邮件

当前示例字段:

['email@domain.com ; email2@domain.com ; email3@domain2.com']
需要:

['domain.com | domain2.com']

如果容易的话


谢谢

我拿了一个列表作为输入

emails  = ['email@domain.com ; email2@domain.com ; email3@domain2.com']
emails = emails.split(' ; ')
domains=set()
for i in emails:
    d = i.index('@')
    domains.add(i[d+1:])
print(domains)
输出将是一组
{'domain2.com','domain.com'}

尝试以下方法:

emails = ['email@domain.com ; email2@domain.com ; email3@domain2.com',
            'email@domain3.com ; email2@domain.com ; email3@domain2.com']

domains = list(set([email.split('@')[1] for email_word in emails
                    for email in email_word.split(' ; ')]))

print(domains)
输出:

['domain2.com', 'domain3.com', 'domain.com']

您可以使用正则表达式来实现这一点

import re

x = ['email@domain.com ; email2@domain.com ; email3@domain2.com ; email4 ; email5@domain5.com']

#first remove all extra spaces. Then split based on ; 

x = re.sub(' ','',x[0]).split(';')

# For each string that has an email id with @, find the domain name
# set command will remove duplicates. Convert the set back to list and print the list

y = list(set([i[i.find('@')+1:] for i in x if '@' in i]))

#alternate code would be 
#y = list(set(i.split('@')[1] for i in x if '@' in i))

print(y)
这将输出

['domain.com', 'domain2.com', 'domain5.com']

第一个示例是当前输入吗?示例2是预期的输出??是的!非常感谢你!您的示例只是一个字符串列表吗?或者假设它是一个包含多个字符串的列表?还是文件中的文本?输出是否假定为刚刚打印?或者假设它在字符串列表中?看起来您只需要一个正则表达式,该正则表达式匹配
@
,后跟所有非空格字符。
@\S+
将匹配该正则表达式。将其与
re.findall()
一起使用。该列表与您定义的方式不同。相反,它看起来像
['email@domain.com ; email2@domain.com ; email3@domain2.com“]
正确。谢谢你的关注。我正要发布同样的东西。是的,使用一个集合并拆分它会给出单词。我们可以通过一个lesser进行迭代,您也可以像@AnGG那样执行
y=list(set(i.split('@')[1]对于x中的i,如果'@'在i中))
['domain.com', 'domain2.com', 'domain5.com']