正则实现:匹配2-3个词,第三个为特定词and时不捕获并正确拆分人名
固定格式人名正则匹配方案
最终可用正则
使用时开启全局匹配标识(g),即可一次性提取文本中所有符合规则的人名:
M[rs]\.\s\w+(?:\s(?!and\b)[\w-]+)?(?:\s\([^)]*\))?
修改逻辑说明
- 修复原正则的语法问题:将
M[rs].中代表任意字符的.转义为字面量匹配\.,确保仅匹配Mr.、Ms.两种固定称谓,避免非预期字符误匹配。 - 适配两词人名场景:将原强制匹配的中间名分组设置为可选匹配(分组末尾增加
?量词),支持「称谓+姓氏」的短人名格式。 - 排除连接词
and误匹配:在中间名匹配分组内增加负向先行断言(?!and\b),匹配空格后先校验后续内容不是独立单词and,仅非连接词的字符段才会被判定为中间名纳入匹配结果。 - 保留原有的括号备注匹配规则,完全兼容带括号补充说明的长人名格式。
匹配验证结果
所有指定格式的人名均可被正确提取:
- 短人名
Mr. Snow:完整捕获 - 带中间名的人名
Mr. John Snow:完整捕获 - 带备注的人名
Mr. John Snow (Winterfall of the nord lands):完整捕获 - 多个人名用and连接的场景
Mr. Snow and Ms. Stark:分别提取得到Mr. Snow、Ms. Stark,无多余字符
内容的提问来源于stack exchange,提问作者Xbel
相关产品推荐
相关产品推荐

