regex - 正则表达式将名称拆分为名字/中间名和姓氏
问题描述
不确定如何解决这个问题,多年来一直试图弄清楚。我有一大堆名字,其中一些的格式与其他人的格式不同,特别是一个例子是:
约翰·大卫·史密斯或约翰·史密斯
现在,在可能的情况下,我希望 Regex 拉回两个匹配项,一个包含名字(如果存在,还有中间名),另一个包含姓氏。目前我正在使用:
(^\w+)|(\w+$)
它工作正常,除了它错过了中间名(如果有的话)。
我意识到我可以很容易地在 .net 中拆分名称并以这种方式阅读它,但是使用正则表达式有一个很好的理由,它将在我的项目中进一步发挥作用。
谢谢
解决方案
这将返回两个结果。一个是名字和中间名(如果存在),第二个是姓氏。
^(.*?)\s([^\s]*)$
“John Smith”将返回“John”和“Smith”,而“John David Smith”将返回“John David”和“Smith”。这是假设名称将不包含空格,但任何其他字符都应该没问题。
在收集此类信息时,您应该尽可能单独收集它们。当您考虑可能包括“范德”和其他可能性的姓氏时,这不是一个完美的解决方案。正则表达式无法判断中间名是两个单词,还是姓氏。
推荐阅读
- sql - 如何从两个不同的表中获取唯一值?
- regex - 正则表达式匹配字符串具有重复模式,没有任何分隔符
- c++ - 转让所有权时按价值捕获的 Lambda
- python - 类方法的 timeit.timeit() 出错
- python - 使用循环过滤嵌套字典列表
- javascript - Woocommerce:如果订阅取消,则隐藏订单详细信息
- cmock - 如何为每个测试使用不同的头文件?
- javascript - 如何确定在 JavaScript 中调用另一个窗口上的函数的窗口
- javascript - 如何显示索引数组的特殊词?
- javascript - 在操作数是类型化数组的 JavaScript 中,最有效的乘法、加法、减法和除法方法是什么?