如何删除字符串的一些前导字符,这是一个Python列表的元素?



我从我的一个同事那里得到了一个电子邮件地址列表,比如-

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)

相关内容

最新更新