首页 > 解决方案 > 如何删除作为 Python 列表元素的字符串的一些前导字符?

问题描述

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

listNew = ['john.smith@hotmail.com', 'Tom White <tom.white@gmail.com', '<connie.green@yahoo.com']

请问如何使用 Python 删除列表的某个地址元素中的“ <”和“”之前的所有字符?<

标签: pythonstringlistcharacter

解决方案


打电话.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()并可能使该范围内的未来读者感到困惑!(尽管对您的情况可能无关紧要)


推荐阅读