正则表达式优化需求:替换称谓后最多两个单词并适配右括号
优化正则表达式匹配头衔后的姓名并处理括号场景
你需要匹配dr、doctor、pr、professor这类头衔,将头衔后的最多两个单词替换为[DOCTOR_NAME],但原正则在姓名后紧跟右括号时无法正确终止匹配,导致结果不符合预期。
示例文本
Examination carried out in agreement with and in the presence of Dr John Doe (rhythmologist).
期望结果
Examination carried out in agreement with and in the presence of Dr [DOCTOR_NAME] (rhythmologist).
优化后的正则表达式
(\s|^|\()(dr|doctor|pr|professor)(\.?\s)([A-Z]\w+(?:\s+[A-Z]\w+)?)(?=\s*\))?
替换模板
使用反向引用替换为:$1$2$3[DOCTOR_NAME]
正则细节解释
(\s|^|\():匹配头衔前的合法前置位置(空格、字符串开头、左括号内),避免误匹配无关场景(dr|doctor|pr|professor):精准匹配目标头衔,如需不区分大小写,可添加i修饰符(如/.../gi)(\.?\s):兼容头衔带点(Dr.)和不带点(Dr)的写法,匹配头衔后的空格分隔符([A-Z]\w+(?:\s+[A-Z]\w+)?):匹配1-2个首字母大写的姓名单词,非捕获组(?:...)用于分组但不占用反向引用位(?=\s*\))?:可选的正向预查,识别姓名后紧跟的空格+右括号组合,确保遇到括号时立即终止匹配,且不捕获括号本身
扩展兼容(可选)
如果需要支持姓名包含中间名缩写(如Dr John D. Doe),可以把姓名部分的正则调整为:
([A-Z]\w*(?:\.?\s+[A-Z]\w*)?)
内容的提问来源于stack exchange,提问作者Januka samaranyake
相关产品推荐
相关产品推荐

