0

例如,电子邮件中都有“@”符号。

lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"] 

当字符数不同时,如何替换“@”之后的所有文本?我的目标是获得一个新列表,例如:

newlist = ["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]
4

6 回答 6

1
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模块。

于 2020-08-31T23:44:23.620 回答
0

您可以使用 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'.

于 2020-09-01T00:06:54.720 回答
0

您可以使用.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)
于 2020-08-31T23:47:19.217 回答
0

您可以使用正则表达式,也可以在此特定示例中使用.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)]
于 2020-08-31T23:55:56.227 回答
0

选项 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"]
于 2020-08-31T23:58:01.420 回答
0

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']
>
于 2020-09-01T05:03:48.150 回答