如何调整Regex分句规则,避免匹配Mr./U.S.等缩写后的句点
正则分句排除缩写句点的修改方案
核心思路是给原有的. 匹配规则增加前置负向回溯断言,过滤所有缩写场景的句点,即可解决误匹配问题。
可直接使用的正则规则
匹配分句分隔符的正则如下,可直接用于split拆分逻辑:
(?<!\b(?:Mr|Mrs|Ms|Dr|Prof|Sr|Jr|St|Ave))(?<!\b[A-Z]\.)\.\s(?=[A-Z0-9\n\r]|$)
规则说明
- 第一个负向断言
(?<!\b(?:Mr|Mrs|Ms|Dr|Prof|Sr|Jr|St|Ave)):排除Mr.、Dr.、St.这类固定头衔/通用缩写后的句点,你可以根据业务需要,直接在括号内补充其他自定义缩写 - 第二个负向断言
(?<!\b[A-Z]\.):排除U.S.、J.K.这类单个大写字母构成的缩写后的句点,同时也能避免匹配到人名首字母缩写后的句点 - 末尾正向断言
(?=[A-Z0-9\n\r]|$):要求句点加空格后必须跟着大写字母、数字、换行或文本结尾,进一步确保匹配的是句末分隔符,降低误判概率
测试效果
拿你给出的样例文本My name is Mr. Aishwarya. 测试,规则只会匹配Aishwarya后面的句点加空格,不会误匹配Mr.后面的句点加空格,也不会误拆分其他缩写场景。
内容的提问来源于stack exchange,提问作者Aishwarya Sharma
相关产品推荐
相关产品推荐

