RegEx将名称拆分为FirstName,MiddleName,FamilyName

时间:2017-02-15 15:59:11

标签: regex

我需要一个正则表达式将名称拆分为名字,姓氏(姓氏)以及介于两者之间的所有(可能为空)中间名。堆栈溢出上的几个项目处理这个问题,但它们不处理以下名称,使用常见的欧洲布局:

Gloria VanderBilt
Gloria van der Bilt
Gloria v.d. Bilt
G. v.d. Bilt

我们人形生物识别名字,中间名和姓氏没有问题。然而,正则表达式并非如此简单。

尝试后,我得到了以下RegEx:

^\b(\w+)\b(.*)\b(\w+)\b

选择三项:

  • 开头的一句话,
  • 然后尽可能多的角色,
  • 最后一句话。

前三个名字是正确的,我甚至将“Gloria”,“v.d。”,“Bilt”作为三个单独的项目,包含正确的标点符号。

唉,姓氏给标点符号带来了问题:

  1. “G”没有圆点!
  2. “。v.d。”太多点
  3. “德比尔特”
  4. 所以作为一个很好的谜题:什么应该是正则表达式?

1 个答案:

答案 0 :(得分:1)

你可以去

^                  # match beginning of the line/string
(?P<first>[\w-.]+) # match a word character (a-z_), a dash and dot
\h*                # horizontal whitespaces, zero or more
(?P<middle>.+)     # at least one character (can be a whitespace)
\h*                # horizontal whitespaces, zero or more
\b(?P<last>\w+)    # a word boundary, followed by word characters
$                  # the end of the line / string

请参阅a demo on regex101.com