【问题标题】:Regular Expression to split names into forename/middle name and surname正则表达式将名称拆分为名字/中间名和姓氏
【发布时间】:2018-06-08 07:27:15
【问题描述】:

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

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

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

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

这很好用,只是它会遗漏中间名(如果有的话)。

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

谢谢

【问题讨论】:

  • 使用 ^(\w+)(?: (\w+))? (\w+)$ 并抓住第 2 组的中间那个。
  • ([A-Za-z]+),\\s*([A-Za-z]+)\\s*([A-Za-z]+)
  • \w[A-Za-z](由 Marker 建议)都不会匹配我朋友的名字 Đuro 或他的朋友 Ćiro
  • @RokoC.Buljan Have you tried before commenting? 这也符合我的名字,Виктор。

标签: regex


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多