正则表达式匹配包含n个或更多指定字符的文本

Dam*_*ian 14 regex

我需要找到包含超过10个","的行(我导入CSV时出错,所以我需要手动更正).我正在使用Notepad ++,所以我不需要写reqex来匹配行,只是为了匹配coma.

(.*,.*){11,100}   //does not work
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 17

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

^[^,\r\n]*(?:,[^,\r\n]*){11,}$
Run Code Online (Sandbox Code Playgroud)

我已添加\r\n到字符类中,或者它将匹配换行符.

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


Mik*_*keM 5

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

(.*?,){11,}

如果一行包含 10 个以上的逗号,这将从行的开头到最后一个逗号匹配。

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

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

 ([^\n]*?,){11,}
Run Code Online (Sandbox Code Playgroud)

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

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