如何编写正则表达式匹配分隔符数量不大于指定值的所有文本行
正则表达式解决方案
匹配分隔符数量≤4的正常行
正确写法:
^([^-]*-){0,4}[^-]*$
原理解释:
[^-]*匹配任意不含分隔符-的字符段,避免模糊匹配混入多余分隔符([^-]*-){0,4}限定「非分隔符段+分隔符」的组合最多出现4次,也就是整行最多有4个分隔符- 末尾的
[^-]*匹配行尾最后一段不带分隔符的内容,正则从行头覆盖到行尾,无遗漏
之前写法失效原因:
^(.*?-){,4}.*$中的末尾.*没有做非分隔符限制,前半部分匹配4个分隔符后,后半部分仍可以匹配到带多余分隔符的内容,导致把超标行也判定为符合要求^(.*?-){4}[^-]+$强制要求「任意字符+分隔符」的组合必须出现4次,只能匹配恰好4个分隔符的行,少于4个的行无法命中
直接匹配损坏行(分隔符≥5个,适合你筛选导出的需求)
大文件处理时直接用这个正则筛选损坏行效率更高:
^([^-]*-){5,}.*$
直接命中「非分隔符段+分隔符」组合出现5次及以上的行,也就是分隔符超标的损坏行,你的示例里的错误条目会被精准匹配。
如果需要适配其他分隔符,把正则中的-替换为对应的分隔符即可。
内容的提问来源于stack exchange,提问作者Zano
相关产品推荐
相关产品推荐

