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 步
- 查找=
\;
- 替换=
\s
第 2 步
- 查找=
^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)$
- 这将 select 所有正确的行。[在上面的例子中:除 3: 和 4: 之外的所有行]
问题是这需要使用替换来更改数据。有没有办法只用正则表达式而不用替换来做到这一点。
我基本上在努力解决必须忽略此模式的部分 \;
。
编辑 1:我正在使用 SUBLIME 文本编辑器。
编辑 2:我已经用 \;
更新了示例文本文件
我不知道您使用的是什么语言,但我个人认为您最好使用 split() 和 count() 函数。这有多种语言版本。
希望对您有所帮助
只需使用“|”在正则表达式中不起作用?
例如^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)|\;$
如果您考虑单独匹配转义字符,则不需要替换:
(?m)^(?:[^\;\r\n]*(?:\.[^\;\r\n]*)*;){6}$
细分:
(?m)
设置多行标志
^
断言行首
(?:
第 1 组 non-capturing 开始
[^\;\r\n]*
匹配除 \
;
\r
和 \n
之外的任何内容
(?:
NCG 2 开始
\.[^\;\r\n]*
匹配一个转义字符并重复匹配最近的字符 class
)*
越多越好
;
匹配一个semi-colon
){6}
正好六次
$
断言行尾
我的数据如下所示:[没有空行]
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 步
- 查找=
\;
- 替换=
\s
- 查找=
第 2 步
- 查找=
^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)$
- 这将 select 所有正确的行。[在上面的例子中:除 3: 和 4: 之外的所有行]
- 查找=
问题是这需要使用替换来更改数据。有没有办法只用正则表达式而不用替换来做到这一点。
我基本上在努力解决必须忽略此模式的部分 \;
。
编辑 1:我正在使用 SUBLIME 文本编辑器。
编辑 2:我已经用 \;
我不知道您使用的是什么语言,但我个人认为您最好使用 split() 和 count() 函数。这有多种语言版本。
希望对您有所帮助
只需使用“|”在正则表达式中不起作用?
例如^([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)([^;]*;)|\;$
如果您考虑单独匹配转义字符,则不需要替换:
(?m)^(?:[^\;\r\n]*(?:\.[^\;\r\n]*)*;){6}$
细分:
(?m)
设置多行标志^
断言行首(?:
第 1 组 non-capturing 开始[^\;\r\n]*
匹配除\
;
\r
和\n
之外的任何内容
(?:
NCG 2 开始\.[^\;\r\n]*
匹配一个转义字符并重复匹配最近的字符 class
)*
越多越好;
匹配一个semi-colon
){6}
正好六次$
断言行尾