例如,电子邮件中所有的电子邮件中都带有“ @”符号。
lst = ["johndoe@example.com","doejohn@email.com","maryjane@domain.com"]
当字符数不同时,如何替换“ @”之后的所有文本?我的目标是获得一个新列表,例如:
newlist = ["johndoe@changed.com", "doejohn@changed.com", "maryjane@changed.com"]
答案 0 :(得分: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
模块。
答案 1 :(得分:0)
您可以使用googleapiclient.errors.HttpError: <HttpError 401 when requesting https://www.googleapis.com/calendar/v3/calendars/primary/events/watch?alt=json returned "Unauthorized WebHook callback channel: https://<heroku_application_id>.herokuapp.com">
来返回符号两侧的字符串数组。
.split()
答案 2 :(得分: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)]
答案 3 :(得分: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"]
答案 4 :(得分:0)
您可以使用python slice来分割'@'
和'.'
之间的每封电子邮件的一部分,并使用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'
结尾,则此方法将派上用场。
答案 5 :(得分:0)
尽管问题变得越来越复杂,尽管split()
和正则表达式是有意义的,但对于如上所述的探测,我们可以简单地使用index()
:
lst = ["johndoe@example.com", "doejohn@email.com", "maryjane@domain.com"]
newlst = [address[:address.index('@')] + "@changed.com" for address in lst]
print(newlst)
输出
> python3 test.py
['johndoe@changed.com', 'doejohn@changed.com', 'maryjane@changed.com']
>