我是正则表达式的新手,我有一个电话簿。我想从中提取名字。我写了这个(下面),但它提取了很多不需要的文本,而不仅仅是名字。你能告诉我我做错了什么,怎么改正吗?这是我的密码:
import re
directory = '''Mark Adamson
Home: 843-798-6698
(424) 345-7659
265-1864 ext. 4467
326-665-8657x2986
E-mail:madamson@sncn.net
Allison Andrews
Home: 612-321-0047
E-mail: AEA@anet.com
Cellular: 612-393-0029
Dustin Andrews'''
nameRegex = re.compile('''
(
[A-Za-z]{2,25}
\s
([A-Za-z]{2,25})+
)
''',re.VERBOSE)
print(nameRegex.findall(directory))
它的输出是:
[('Mark Adamson', 'Adamson'), ('net\nAllison', 'Allison'), ('Andrews\nHome', 'Home'), ('com\nCellular', 'Cellular'), ('Dustin Andrews', 'Andrews')]
非常感谢您的帮助!你知道吗
我可以建议尝试下一个正则表达式,它对我很有用:
你的问题是
\s
也会匹配换行符。只需添加一个空格,而不是\s
。就是这样如果名字正好有两个词,这个方法就有效了。如果名称包含两个以上的单词(中间名或连字符的姓氏),则您可能希望将其扩展为:
它查找一个或多个单词,并将从一行的开头延伸到结尾(例如,将不只是从“John Paul Jones”得到“John Paul”)
下面的正则表达式按预期工作。你知道吗
代码的相关部分:
输出:
相关问题 更多 >
编程相关推荐