[英]REGEX Name and any surname
在下面的示例中,我想在正則表達式中創建2個組:
名字FirtSurname SecondSurname ..
第一組是姓名
第二個FirtSurname SecondSurname ...
^(\w+)(.*)$ - would capture all
\w+ - would make n groups (number of words).
我只想要2組。 名和其他名稱。
有什么幫助嗎?
首先,作為標有標點符號的人:-)請不要使用\\w
嘗試匹配名稱:-)… -
和'
並不少見。
例如,使用Perl:
if ("Bruce-Robert Fenn Pocock" =~ /^(\w+)(.*)$/) { print "First: $1 Rest: $2" }
→ First: Bruce Rest: -Robert Fenn Pocock
也許只是將所有非空格字符分組,然后跳過第一次出現的空格:
if ("Bruce-Robert Fenn Pocock" =~ /^(\S+)\s*(.*)$/) { print "First: $1 Rest: $2" }
→ First: Bruce-Robert Rest: Fenn Pocock
當然,如果您遇到的是數據集中具有中間名的人,則除了區分母體—副詞對或多部分姓氏之外,沒有其他方法可以告訴他們。
我希望/假設您在輸入中也沒有敬意。
First: Don Rest: Juan de la Mancha
*** wrong: Don is honorific
First: Diego Rest: de la Vega
First: John Rest: Jacob Smith
*** wrong: Jacob is probably a middle name
First: De'shawna Rest: Cummings
First: Wehrner Rest: von Braun
First: Oscar Rest: Vazquez-Oliverez
最終,將名字准確地分解為一個尊稱的給定名稱,中間名,姓氏(matronym,patronym)和后綴的唯一方法是詢問 。
(例如,我自己的名字,在盎格魯圈子中,“ Fenn”在拉丁裔圈子中被視為“中間名”,被解釋為同義詞。)
通常可以從一個列表中猜測出榮譽和足夠的東西,但是例如,軍事頭銜和博士的名字很長 (“ John Doe,Pharm.D博士”,“ Maj。Gen. Thomas Ts'o”)而且不是明確的(例如,“唐”既是“唐納德”的縮寫,又是尊稱。
http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
假設單詞之間只有一個空格,則可以這樣做:
(\w+) ([\w ]+)
如果可能有多個空格:
(\w+) +([\w ]+)
要消除末端的空格:
\b(\w+)\b \b([\w ]+)\b
如@BRPocock所述,要允許破折號和撇號:
\b([\w-']+)\b \b([\w -']+)\b
雖然這在結尾處禁止標點符號,但它允許多個破折號和撇號,包括彼此相鄰的破折號和撇號,例如: Mc'er'''doo--dl-e
使它比這更強大可以成為其內部的項目。
假設您只想在組1中使用名字,而在組2中使用其余名字:
^(\\b[\\w]+\\b)([\\w\\W]+)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.