我是正则表达式的新手,并且我有一个电话目录。我想从中提取名称。我写了这个(下),但是它提取了很多不需要的文本,而不仅仅是名字。您能告诉我我在做什么错以及如何纠正吗?这是我的代码:
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))
Run Code Online (Sandbox Code Playgroud)
它给出的输出是:
[('Mark Adamson', 'Adamson'), ('net\nAllison', 'Allison'), ('Andrews\nHome', 'Home'), ('com\nCellular', 'Cellular'), ('Dustin Andrews', 'Andrews')]
Run Code Online (Sandbox Code Playgroud)
真的很感谢您的帮助!
您的问题是,\s还会匹配换行符。而不\s只是添加一个空格。那是
name_regex = re.compile('[A-Za-z]{2,25} [A-Za-z]{2,25}')
Run Code Online (Sandbox Code Playgroud)
如果名称恰好有两个词,则此方法有效。如果名称包含两个以上的单词(中间名或带连字符的姓氏),则可能需要将其扩展为:
name_regex = re.compile(r"^([A-Za-z \-]{2,25})+$", re.MULTILINE)
Run Code Online (Sandbox Code Playgroud)
这将查找一个或多个单词,并将从一行的开始一直延伸到行尾(例如,不仅会从“ John Paul Jones”获得“ John Paul”)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |