求助可解析多格式姓名字符串、返回3个匹配项的正则表达式
正则实现方案
符合要求的正则表达式如下:
[A-Z]{2,}(?=[A-Z][a-z]|\b)|[A-Z][a-z]*
匹配逻辑说明
- 第一个分支
[A-Z]{2,}(?=[A-Z][a-z]|\b):匹配连续2个及以上的全大写字符,仅当该字符段后面紧跟「首字母大写后续小写的字符串」或是单词边界时触发,专门用于匹配全大写的姓氏部分,不管姓氏是单独拆分还是和后续名字拼接的场景 - 第二个分支
[A-Z][a-z]*:匹配首字母大写、后续为任意数量小写字母的字符串,用于匹配首字母大写的名和中间名部分
覆盖场景验证
对所有列出的8种姓名格式,该正则都恰好返回3个匹配项,无需依赖分组提取:
Last First Middle→ 匹配结果:Last、First、MiddleLAST First Middle→ 匹配结果:LAST、First、MiddleLast FirstMiddle→ 匹配结果:Last、First、MiddleLAST FirstMiddle→ 匹配结果:LAST、First、MiddleLastFirst Middle→ 匹配结果:Last、First、MiddleLASTFirst Middle→ 匹配结果:LAST、First、MiddleLastFirstMiddle→ 匹配结果:Last、First、MiddleLASTFirstMiddle→ 匹配结果:LAST、First、Middle
内容的提问来源于stack exchange,提问作者Steve Venton
相关产品推荐
相关产品推荐

