如何从tex块中提取所有名称

2024-04-25 13:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着从一段文字(实际上是从电子邮件正文中)中抓取一些名字,这些文字通常看起来像这样:

From: aaa@aaa.com
CC: John Smith <aaa@aaa.com>, Charles <aaa@aaa.com>, Mary Lamb <aaa@aaa.com>, Chino <aaa@aaa.com>, Claudia <aaa@aaa.com>, <aaa@aaa.com>, <bbb@bbb.com>, John <aaa@aaa.com>
Hi there AAA! Hope you had a wonderful time
Best,
AAA

我希望最后得到一个list变量,它只保存CC上每个人的名字(名字和姓氏,如果有的话),而放弃其余的信息。使用regex的简单而干净的方法是什么?(这不是一个测试,这是一个真正的应用程序,我正在工作和卡住…)。我已经可以用一个关于芬德尔()与我找到的电子邮件匹配。你知道吗

谢谢


Tags: fromcom电子邮件名字johnccsmith文字
3条回答

使用正则表达式:

re.findall("(?:CC: |, )([\w ]*) <\S*@\S*>", str)

您可以使用以下正则表达式:

[:,] ([\w ]+) \<

RegEx Demo


>>> p = re.compile(ur'[:,] ([\w ]+) \<') 
>>> m = re.findall(p, text)
>>> print m
['John Smith', 'Charles', 'Mary Lamb', 'Chino', 'Claudia', 'John']

你可以试试下面的。你知道吗

>>> import re
>>> s = """From: aaa@aaa.com
... CC: John Smith <aaa@aaa.com>, Charles <aaa@aaa.com>, Mary Lamb <aaa@aaa.com>, Chino <aaa@aaa.com>, Claudia <aaa@aaa.com>, <aaa@aaa.com>, <bbb@bbb.com>, John <aaa@aaa.com>
... Hi there AAA! Hope you had a wonderful time
... Best,
... AAA"""
>>> re.findall(r'(?<=[:,]\s)[A-Z][a-z]+(?:\s[A-Z][a-z]+)?(?=\s<)', s)
['John Smith', 'Charles', 'Mary Lamb', 'Chino', 'Claudia', 'John']

相关问题 更多 >