【问题标题】:REGEX Name and any surname正则表达式名称和任何姓氏
【发布时间】:2014-02-05 16:07:35
【问题描述】:

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

名字 FirtSurname SecondSurname ..

第一组是 姓名

第二个 FirtSurname SecondSurname ...

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

我只想要 2 个组。名字和后面的任何东西。

有什么帮助吗?

【问题讨论】:

  • 你能举一个你期望收到的各种输入的例子吗?

标签: regex regex-group knime


【解决方案1】:

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

最终,将一个名字准确地分解为敬称、名、中间名、姓(母名、父名)和后缀的唯一方法是询问 .

(例如,我自己的名字,在盎格鲁圈子里,“芬恩”被认为是“中间名”,在拉丁裔圈子里,它被解释为母语。)

通常可以从列表中猜出敬语和足够用语,但例如军事头衔和博士足够是一个列表(“Dr John Doe, Pharm.D”、“Maj. Gen. Thomas Ts'o”)并且不是明确的(例如“Don”都是一个简短的“Donald”的形式和敬语)。

PS。可爱的文章在这里:

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

【讨论】:

    【解决方案2】:

    假设您只需要第 1 组中的第一个名字,而第 2 组中的其余名称:

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

    【讨论】:

      【解决方案3】:

      假设单词之间只有一个空格,这可行:

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

      Debuggex Demo

      如果可能有多个空格:

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

      消除末尾的空格:

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

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

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

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

      让它比这更健壮可以成为一个项目。

      【讨论】:

      • 确认!!你接受了我的回答,然后不接受它! X(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多