我需要一个正则表达式将名称拆分为名字,姓氏(姓氏)以及介于两者之间的所有(可能为空)中间名。堆栈溢出上的几个项目处理这个问题,但它们不处理以下名称,使用常见的欧洲布局:
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”作为三个单独的项目,包含正确的标点符号。
唉,姓氏给标点符号带来了问题:
所以作为一个很好的谜题:什么应该是正则表达式?
答案 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