簡體   English   中英

REGEX名稱和任何姓氏

[英]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”)而且不是明確的(例如,“唐”既是“唐納德”的縮寫,又是尊稱。

PS。 可愛的文章在這里:

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

假設單詞之間只有一個空格,則可以這樣做:

(\w+) ([\w ]+)

正則表達式可視化

Debuggex演示

如果可能有多個空格:

(\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.

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