17

我需要找到包含超过 10 个“,”的行(我在导入 CSV 时出错,所以我需要手动更正)。我正在使用 Notepad++,所以我不需要写 reqex 来匹配行,只需要匹配逗号。

(.*,.*){11,100}   //does not work
4

2 回答 2

20

.*也匹配逗号。您需要排除具有否定字符类的那些([^,]匹配逗号以外的任何字符):

^[^,\r\n]*(?:,[^,\r\n]*){11,}$

我已添加\r\n到字符类中,否则它将跨换行符匹配。

但是请注意,这也会计算引用字符串中包含的逗号,因此如果您有逗号,您将误判 CSV 行中的字段数。

于 2013-01-22T17:28:29.417 回答
6

假设 Notepad++ 版本 6+(它使用 PCRE Perl 兼容的正则表达式库)并且 ' . 匹配换行符' 框未在“查找”窗口中打勾:

(.*?,){11,}

如果一行包含超过 10 个逗号,这将从行首匹配到最后一个逗号。

(.*?,)尽可能少地匹配除换行符之外的任何字符,直到下一个字符是逗号;{11,}表示 11 次或更多次。

如果您希望正则表达式工作,无论 ' 是否匹配换行符'框被勾选,你可以使用:

 ([^\n]*?,){11,}

如果 ' ,您的正则表达式确实有效匹配换行符'框没有打勾,但由于它贪婪地匹配任何字符,可能有如此大量的潜在匹配项,它可能会挂起应用程序。?在之后添加.*以便通配符懒惰地勉强地匹配,即尽可能少地匹配,应该可以解决问题。

PCRE 手册页
Perl 正则表达式文档- 推荐。
Notepad++“过时”的正则表达式教程

于 2013-01-22T17:55:17.277 回答