首页 > 解决方案 > 正则表达式将名称拆分为名字/中间名和姓氏

问题描述

不确定如何解决这个问题,多年来一直试图弄清楚。我有一大堆名字,其中一些的格式与其他人的格式不同,特别是一个例子是:

约翰·大卫·史密斯约翰·史密斯

现在,在可能的情况下,我希望 Regex 拉回两个匹配项,一个包含名字(如果存在,还有中间名),另一个包含姓氏。目前我正在使用:

(^\w+)|(\w+$)

它工作正常,除了它错过了中间名(如果有的话)。

我意识到我可以很容易地在 .net 中拆分名称并以这种方式阅读它,但是使用正则表达式有一个很好的理由,它将在我的项目中进一步发挥作用。

谢谢

标签: regex

解决方案


这将返回两个结果。一个是名字和中间名(如果存在),第二个是姓氏。

^(.*?)\s([^\s]*)$

“John Smith”将返回“John”和“Smith”,而“John David Smith”将返回“John David”和“Smith”。这是假设名称将不包含空格,但任何其他字符都应该没问题。

在收集此类信息时,您应该尽可能单独收集它们。当您考虑可能包括“范德”和其他可能性的姓氏时,这不是一个完美的解决方案。正则表达式无法判断中间名是两个单词,还是姓氏。


推荐阅读