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

Regex 正则表达式以匹配包含n个或多个指定字符的文本,regex,Regex,我需要找到包含超过10个“,”的行(我在导入CSV时出错,所以需要手动更正)。 我使用的是记事本+,所以我不需要编写REQUEX来匹配行,只需要匹配comas (.*,.*){11,100} //does not work *也匹配逗号。您需要排除具有否定字符类的字符([^,]匹配除逗号以外的任何字符): 我已将\r\n添加到character类,否则它将跨换行匹配 但是,请注意,这也会计算引号字符串中包含的逗号,因此如果您有逗号,您将错误判断CSV行中的字段数。假设Notepad++ve

我需要找到包含超过10个“,”的行(我在导入CSV时出错,所以需要手动更正)。 我使用的是记事本+,所以我不需要编写REQUEX来匹配行,只需要匹配comas

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

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

我已将
\r\n
添加到character类,否则它将跨换行匹配


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

假设Notepad++version 6+(使用PCRE Perl兼容的正则表达式库)“查找”窗口中未勾选“匹配换行符”框:

(.*?,){11,}

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

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

如果希望正则表达式工作,而不管是否勾选了“匹配换行符”框,则可以使用:

 ([^\n]*?,){11,}
如果未勾选“匹配换行符”框,您的正则表达式确实可以工作,但由于它贪婪地匹配任何字符,因此可能存在大量潜在匹配项,可能会导致应用程序挂起。在
*
之后添加
,以便通配符惰性地或不情愿地匹配,即尽可能少地匹配,应该可以解决问题


-推荐。

您能澄清一下“不起作用”是什么意思吗?你的正则表达式应该找到超过10个逗号的行,即使它的业务非常复杂。
 ([^\n]*?,){11,}