Regex 正则表达式以匹配包含n个或多个指定字符的文本
我需要找到包含超过10个“,”的行(我在导入CSV时出错,所以需要手动更正)。 我使用的是记事本+,所以我不需要编写REQUEX来匹配行,只需要匹配comasRegex 正则表达式以匹配包含n个或多个指定字符的文本,regex,Regex,我需要找到包含超过10个“,”的行(我在导入CSV时出错,所以需要手动更正)。 我使用的是记事本+,所以我不需要编写REQUEX来匹配行,只需要匹配comas (.*,.*){11,100} //does not work *也匹配逗号。您需要排除具有否定字符类的字符([^,]匹配除逗号以外的任何字符): 我已将\r\n添加到character类,否则它将跨换行匹配 但是,请注意,这也会计算引号字符串中包含的逗号,因此如果您有逗号,您将错误判断CSV行中的字段数。假设Notepad++ve
(.*,.*){11,100} //does not work
*
也匹配逗号。您需要排除具有否定字符类的字符([^,]
匹配除逗号以外的任何字符):
我已将\r\n
添加到character类,否则它将跨换行匹配
但是,请注意,这也会计算引号字符串中包含的逗号,因此如果您有逗号,您将错误判断CSV行中的字段数。假设Notepad++version 6+(使用PCRE Perl兼容的正则表达式库)“查找”窗口中未勾选“匹配换行符”框:
(.*?,){11,}
如果一行包含10个以上的逗号,则将从该行的开头到最后一个逗号匹配
(*?,)
尽可能少地匹配除换行符以外的任何字符,直到下一个字符是逗号{11,}
表示11次或更多次
如果希望正则表达式工作,而不管是否勾选了“匹配换行符”框,则可以使用:
([^\n]*?,){11,}
如果未勾选“匹配换行符”框,您的正则表达式确实可以工作,但由于它贪婪地匹配任何字符,因此可能存在大量潜在匹配项,可能会导致应用程序挂起。在*
之后添加?
,以便通配符惰性地或不情愿地匹配,即尽可能少地匹配,应该可以解决问题
-推荐。
您能澄清一下“不起作用”是什么意思吗?你的正则表达式应该找到超过10个逗号的行,即使它的业务非常复杂。
([^\n]*?,){11,}