例如,电子邮件中都有“@”符号。
lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
当字符数不同时,如何替换“@”之后的所有文本?我的目标是获得一个新列表,例如:
newlist = ["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]
例如,电子邮件中都有“@”符号。
lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
当字符数不同时,如何替换“@”之后的所有文本?我的目标是获得一个新列表,例如:
newlist = ["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]
lst = ["johndoe@example.com", "doejohn@email.com", "maryjane@domain.com"]
out = [i.split("@")[0] + "@changed.com" if "@" in i else i for i in lst]
print(out)
印刷:
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
注意:对于更高级的用例,我建议查看re模块。
您可以使用 python slices 来分割每封电子邮件的 和 之间的部分'@','.'并使用该replace方法将切片替换为所需的域:
lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
lst = [e.replace(e[e.find('@')+1:e.find('.')], 'changed') for e in lst]
print(lst)
输出:
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
如果不是所有的电子邮件地址都以 结尾'.com',例如,一些以'.ca'.
您可以使用.split()which 将返回符号两侧的字符串数组。
list = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
split_list = []
for email in list:
split_email = email.split("@")
split_list.append(split_email[0] + "@changed.com")
print(split_list)
您可以使用正则表达式,也可以在此特定示例中使用.partition :
lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
>>> [lh+sep+'changed.com' for lh,sep,rh in (s.partition('@') for s in lst)]
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
如果'@'可能不在字符串中,并且您不希望修改这些字符串,则可以执行以下操作:
[lh+sep+'changed.com' if sep else lh
for lh,sep,rh in (s.partition('@') for s in lst)]
选项 1:使用正则表达式(正则表达式)。这些使用 re 库。
选项 2:通过循环遍历列表并将字符串拆分为域和信息部分,然后将域设置为“changed.com”,以更 Python 的方式进行操作。像这样:
emails = ["aperson@email.com", "another@example.org", "onemore@something.net"]
new = [email.split("@")[0]+"@newone.com" for email in emails]
这使用了一种叫做列表推导的东西,这是一个非常好的 Python 特性。它创建一个名为的列表,该列表new存储email具有域结尾的每个项目。
你可以做一个这样的函数:
def new_domain(emails,domain):
return [email.split("@")[0]+"@"+domain for email in emails]
这意味着您可以在有要更改结尾的电子邮件列表时使用它:
>>> emails = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
>>> new_domain(emails,"changed.com")
["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]
Although split() and regular expressions make sense as the problem gets more complex, for the probem as described, we can simply use index():
lst = ["johndoe@example.com", "doejohn@email.com", "maryjane@domain.com"]
newlst = [address[:address.index('@')] + "@changed.com" for address in lst]
print(newlst)
OUTPUT
> python3 test.py
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
>