匹配字母间英文句号的正则编写问题(排除三个连续点的省略号场景)
正则表达式捕获字母间英文句号实现方案
需求背景
需要编写正则捕获文本中位于两个字母之间的英文句号,同时满足多类排除规则:
- 放行句子中间的三个连续英文句号(省略号),例如
not...match中的三个点不被匹配 - 排除句号后紧跟空格、数字、&、普通双引号、中文左引号的场景,例如
."、.“、7.30均不触发匹配 - 仅匹配类似
is.match中的单个英文句号这类符合要求的内容
最终可用正则
(?<=\p{L})(?:\.{1,2}|\.{4,})(?=[^ 0-9.&"“]\p{L})
规则拆解
- 前导断言
(?<=\p{L}):限定匹配位置的前一个字符必须是Unicode字母,确保匹配的句号前接字母 - 匹配主体
(?:\.{1,2}|\.{4,}):仅匹配1-2个连续句号,或者4个及以上连续句号,天然排除了3个连续句号的省略号场景 - 后置断言
(?=[^ 0-9.&"“]\p{L}):限定匹配位置的后续字符不属于空格、数字、&、句号、双引号、中文左引号的范围,且后接字母,符合预设的其他例外排除规则
内容的提问来源于stack exchange,提问作者oliverkea
相关产品推荐
相关产品推荐

