我从我的一个同事那里得到了一个电子邮件地址列表,比如-
listNew = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']
我如何删除'<
'和'<
'之前的所有字符在一些地址元素的列表与Python,请?
呼叫.split()
,取最后一部分!
作为列表推导式
[value.split("<")[-1] for value in original_values]
如果您希望同时任何可用的名称和地址,请使用专用库,它还可以处理有关电子邮件地址有效性的麻烦边缘
https://docs.python.org/3/library/email.utils.html#email.utils.parseaddr
>>> from email.utils import parseaddr
>>> parseaddr("foo <bar.baz@example.com") # easily handles missing '>'
('foo', 'bar.baz@example.com')
一起
from email.utils import parseaddr
def parse_emails_to_pairs(emails_list):
for email_str in emails_list:
name, email = parseaddr(email_str)
if not email:
raise ValueError(f"couldn't parse email {email_str}")
yield (name or None, email)
>>> list(parse_emails_to_pairs(['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']))
[(None, 'john.smith@hotmail.com'), ('Tom White', 'tom.white@gmail.com'), (None, 'connie.green@yahoo.com')]
还要注意,将列表按字面意思命名为list
是一种糟糕的做法,因为它会掩盖list()
,并可能使该范围内的未来读者感到困惑!(尽管这可能与您的情况无关)
list1 = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']
for i in range(len(list1)):
list1[i]=list1[i].split('<')[-1]
print(list1)
一种解决方案是对数组使用map()方法,然后通过lambda函数将它们传递给每个数组项,从而对它们应用replace()。
list = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']
list = map(lambda email: email.replace("<", ""), list)
print(list)
编辑:没有看到你想要删除所有的前导,而不仅仅是<,在这种情况下,你可以使用find()函数对字符串:
for idx, val in enumerate(list):
print(list[idx])
if val.find('<') >= 0:
list[idx] = val[val.find('<')+1:len(val)]
else:
list[idx] = val
print(list)