如何编写正则表达式匹配除3次外的任意重复次数(句点筛选场景)
正则表达式实现方案
你需要的用于匹配句点数量不等于3的正则可直接使用以下两种写法:
写法1:兼容所有基础正则引擎(无需前瞻支持)
^(?:[^.]*\.){0,2}[^.]*$|^(?:[^.]*\.){4,}[^.]*$
逻辑说明
- 前半段
^(?:[^.]*\.){0,2}[^.]*$覆盖句点数量为0、1、2的场景(少于3个句点) - 后半段
^(?:[^.]*\.){4,}[^.]*$覆盖句点数量≥4的场景(多于3个句点) - 两段通过或逻辑
|拼接,即可匹配所有句点数量不等于3的文本
写法2:简洁版(需正则引擎支持否定前瞻语法)
^(?!([^.]*\.){3}[^.]*$).*$
逻辑说明
通过否定前瞻(?!...)先排除掉恰好包含3个句点的字符串,剩下所有内容都会被匹配,写法更精简。
验证示例
- 符合筛选规则(会被正则匹配到)的文本:
- 无句点:
testcontent - 1个句点:
xxx.yyy - 2个句点:
xxx.yyy.zzz - 4个及以上句点:
xxx.yyy.zzz.aaa.bbb
- 无句点:
- 不符合筛选规则(不会被匹配到)的文本:
- 恰好3个句点:
xxx.yyy.zzz.aaa
- 恰好3个句点:
内容的提问来源于stack exchange,提问作者David Waterworth
相关产品推荐
相关产品推荐

