我的数据如下所示:[无空行]
号码;姓氏或公司;名字;城市;邮政编码;金额;
1;特普;唐纳德;华盛顿; 12345; 4;
2;布什;乔治;华盛顿; 54321; 1;
3;劳埃德\;和Firends ;; 11111; 2;
4; SCHUHMACHER \; Frenzen \; Fettel;和公司;任何地方; 22222; 3;
5;最佳\;好友;公司\; CO;无处; 33333; 4;
我试图通过查找每行没有6个条目的行来验证此csv文件。我通过计算每行;
的数量来做到这一点。唯一的问题是\;
(转义分号)不应计算在内。
这就是我现在正在做的事情:
第1步
\\;
\s
第2步
^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)$
问题是这需要使用替换来更改数据。有没有办法只用正则表达式和NO替换来做到这一点。
我基本上在努力处理我必须忽略这种模式的部分\;
。
编辑1:我正在使用SUBLIME文本编辑器。
编辑2:我已使用\;
答案 0 :(得分:2)
如果您考虑单独匹配转义字符,则不需要替换:
(?m)^(?:[^\\;\r\n]*(?:\\.[^\\;\r\n]*)*;){6}$
故障:
(?m)
设置多行标记^
断言行首(?:
开始非捕获组1
[^\\;\r\n]*
匹配除\
;
\r
和\n
(?:
NCG的开始2
\\.[^\\;\r\n]*
匹配转义的字符并重复匹配最近的字符类)*
尽可能多;
匹配分号){6}
完全六次$
断言行尾答案 1 :(得分:0)
只需使用“|”在正则表达式不工作?
e.g。 ^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)|\\;$
答案 2 :(得分:-1)
我不知道你正在使用什么语言,但我个人认为你最好使用split()跟随count()函数。这有多种语言版本。
希望有帮助