REGEX - 计算忽略转义字符的次数

时间:2018-03-28 08:33:29

标签: regex sublimetext

我的数据如下所示:[无空行]

  

号码;姓氏或公司;名字;城市;邮政编码;金额;

     

1;特普;唐纳德;华盛顿; 12345; 4;

     

2;布什;乔治;华盛顿; 54321; 1;

     

3;劳埃德\;和Firends ;; 11111; 2;

     

4; SCHUHMACHER \; Frenzen \; Fettel;和公司;任何地方; 22222; 3;

     

5;最佳\;好友;公司\; CO;无处; 33333; 4;

我试图通过查找每行没有6个条目的行来验证此csv文件。我通过计算每行;的数量来做到这一点。唯一的问题是\;(转义分号)不应计算在内。

这就是我现在正在做的事情:

  1. 第1步

    • 查找= \\;
    • 替换= \s
  2. 第2步

    • 查找= ^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)$
    • 这将选择所有正确的行。[在上述情况下:除3:和4之外的所有行:]
  3. 问题是这需要使用替换来更改数据。有没有办法只用正则表达式和NO替换来做到这一点。

    我基本上在努力处理我必须忽略这种模式的部分\;

    编辑1:我正在使用SUBLIME文本编辑器。 编辑2:我已使用\;

    更新了示例文本文件

3 个答案:

答案 0 :(得分:2)

如果您考虑单独匹配转义字符,则不需要替换:

(?m)^(?:[^\\;\r\n]*(?:\\.[^\\;\r\n]*)*;){6}$

Live demo

故障:

  • (?m)设置多行标记
  • ^断言行首
  • (?:开始非捕获组1
    • [^\\;\r\n]*匹配除\ ; \r\n
    • 之外的任何内容
    • (?: NCG的开始2
      • \\.[^\\;\r\n]*匹配转义的字符并重复匹配最近的字符类
    • )*尽可能多
    • ;匹配分号
  • ){6}完全六次
  • $断言行尾

答案 1 :(得分:0)

只需使用“|”在正则表达式不工作?

e.g。 ^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)|\\;$

答案 2 :(得分:-1)

我不知道你正在使用什么语言,但我个人认为你最好使用split()跟随count()函数。这有多种语言版本。

希望有帮助