簡體   English   中英

如何使用正則表達式提取人名?

[英]How to extract person name using regular expression?

我是正則表達式的新手,我有一個電話目錄。 我想從中提取出來的名字。 我寫了這個(下面),但它提取了許多不需要的文本而不僅僅是名字。 你能告訴我我做錯了什么以及如何糾正它? 這是我的代碼:

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只需添加一個空格。 那是

name_regex = re.compile('[A-Za-z]{2,25} [A-Za-z]{2,25}')

如果名稱恰好有兩個單詞,則此方法有效。 如果名稱有兩個以上的單詞(中間名或帶連字符的姓氏),那么您可能希望將其擴展為:

name_regex = re.compile(r"^([A-Za-z \-]{2,25})+$", re.MULTILINE)

這會查找一個或多個單詞,並且會從一行開頭到另一行結束(例如,不會僅僅從'John Paul Jones'獲得'John Paul')

我建議嘗試下一個正則表達式,它對我有用:

"([A-Z][a-z]+\s[A-Z][a-z]+)"

以下正則表達式按預期工作。

相關部分代碼:

nameRegex = re.compile(r"^[a-zA-Z]+[',. -][a-zA-Z ]?[a-zA-Z]*$", re.MULTILINE)

print(nameRegex.findall(directory) 

輸出:

>>> python3 test.py 
['Mark Adamson', 'Allison Andrews', 'Dustin Andrews']

嘗試:

nameRegex = re.compile('^((?:\w+\s*){2,})$', flags=re.MULTILINE)

這將只選擇由兩個或多個由“單詞”字符組成的名稱組成的完整行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM