REGEX名称和任何姓氏

时间:2014-02-05 16:07:35

标签: regex regex-group knime

在下面的示例中,我想在正则表达式中创建两个组:

将FirtSurname命名为SecondSurname ..

第一组是 姓名

第二个 FirtSurname SecondSurname ......

^(\w+)(.*)$   - would capture all
\w+           - would make n groups (number of words). 

我只想要两组。名字和随后的任何内容。

任何帮助?

3 个答案:

答案 0 :(得分:4)

首先,作为有我名字标点符号的人:-)请不要使用\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

当然,如果您在数据集中遇到具有中间名称的人,则无法区分matronym-patronym对或多部分姓氏。

我希望/假设你的投入中没有敬意。

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

最终,将名称精确分解为敬意名称,名称,中间名,姓氏(姓名,副词)和后缀(es)的唯一方法是询问

(EG。我自己的名字,在Anglo圈子里,“Fenn”被认为是拉丁美洲圈子中的“中间名”,它被解释为一个短语。)

通常可以从列表中猜到荣誉和足够,但是例如军事头衔和博士学位是名单(“John Doe博士,Pharm.D”,“Maj.Gen。Thomas Ts'o”)并且不明确(例如“Don”都是短篇) “唐纳德”和尊敬的形式。

PS。可爱的文章:

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

答案 1 :(得分:1)

假设单词之间只有一个空格,则可以:

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

Regular expression visualization

Debuggex Demo

如果可能有多个空格:

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

消除两端的空格:

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

允许破折号和撇号,如@BRPocock所述:

\b([\w-']+)\b \b([\w -']+)\b

虽然这禁止在结尾处使用标点符号,但它允许多个破折号和撇号,包括彼此相邻,例如:Mc'er'''doo--dl-e

使它比这更强大可以成为一个项目本身。

答案 2 :(得分:1)

假设您只需要组1中的名字和组2中名称的其余部分:

^(\b[\w]+\b)([\w\W]+)