You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询可从带Name前缀的字符串中提取名、中间名、姓的正则表达式

姓名拆分正则实现

所有方案均基于你已使用的Name: 固定前缀锚定逻辑,不会误匹配其他行的无关字段内容。

各姓名段对应的提取正则

提取名(Given Name)

在你现有逻辑基础上优化匹配边界,避免冗余抓取:

(?<=Name:\s)[a-zA-Z]+
  • 匹配逻辑:锚定Name: 前缀,抓取后方第一个不含空格的连续英文字母串,遇到第一个空格即停止,可精准匹配示例中的John。

提取中间名(Middle Name)

精准定位名和姓之间的文本段:

(?<=Name:\s[a-zA-Z]+\s)[a-zA-Z]+(?=\s[a-zA-Z]+$)
  • 匹配逻辑:
    • 前置断言:定位到Name: 、名的连续字母、名后空格的位置
    • 抓取当前位置的连续字母串
    • 后置断言:当前抓取内容的后方需接一个空格、再接最后一段字母直到当前行结束,可精准匹配示例中的Doe。

提取姓(Last Name / Family Name)

抓取姓名行末尾的最后一个字段:

(?<=Name:\s[a-zA-Z]+\s[a-zA-Z]+\s)[a-zA-Z]+$
  • 匹配逻辑:锚定Name: 、名、中间名及对应间隔空格的位置,抓取最后一段连续字母直到行尾,可精准匹配示例中的Smith。

适配调整提示

  • 上述正则默认姓名为固定三段结构,遇到带撇号、连字符的姓名(如O'Connor、Anne-Marie)时,可将字符匹配范围从[a-zA-Z]调整为[a-zA-Z'-]以兼容特殊字符
  • 正则匹配需开启多行匹配模式,否则行尾的$会匹配整个文档的末尾,而非当前姓名行的结束位置
  • 若需要兼容无中间名的两段式姓名(如Name: John Smith),更稳妥的实现是使用命名捕获组一次完成整段匹配,无需多层前后断言:
    Name:\s(?<given>[a-zA-Z]+)(?:\s(?<middle>[a-zA-Z]+))?\s(?<family>[a-zA-Z]+)
    
    直接通过given/middle/family三个命名捕获组取值即可,同时兼容有/无中间名的场景。

内容的提问来源于stack exchange,提问作者Ayubx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 22:27:07