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

REGEX - Count Number of Occurrences Ignoring Escaped Characters

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

Number;Lastname or Company;Firstname;City;Postcode;Amount;

1;Trump;Donald;Washington;12345;4;

2;Bush;George;Washington;54321;1;

3;Lloyds\; and Firends;;11111;2;

4;Schuhmacher\;Frenzen\;Fettel; and Co;Company;Anywhere;22222;3;

5;Best\;Friends;Company\;Co;Nowhere;33333;4;

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

我现在就是这样做的:

  1. 第 1 步

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

    • 查找=^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)$
    • 这将 select 所有正确的行。[在上面的例子中:除 3: 和 4: 之外的所有行]

问题是这需要使用替换来更改数据。有没有办法只用正则表达式而不用替换来做到这一点。

我基本上在努力解决必须忽略此模式的部分 \;

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

更新了示例文本文件

我不知道您使用的是什么语言,但我个人认为您最好使用 split() 和 count() 函数。这有多种语言版本。

希望对您有所帮助

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

例如^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)|\;$

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

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

Live demo

细分:

  • (?m) 设置多行标志
  • ^ 断言行首
  • (?: 第 1 组 non-capturing 开始
    • [^\;\r\n]* 匹配除 \ ; \r\n
    • 之外的任何内容
    • (?: NCG 2 开始
      • \.[^\;\r\n]* 匹配一个转义字符并重复匹配最近的字符 class
    • )*越多越好
    • ;匹配一个semi-colon
  • ){6}正好六次
  • $ 断言行尾