我需要查找包含超过10个“,”的行(我导入CSV时出错,所以我需要手动更正)。 我正在使用Notepad ++,所以我不需要写reqex来匹配行,只是为了匹配comas。
(.*,.*){11,100} //does not work
答案 0 :(得分:16)
.*
也匹配逗号。您需要排除具有否定字符类的字符([^,]
匹配除逗号之外的任何字符):
^[^,\r\n]*(?:,[^,\r\n]*){11,}$
我已将\r\n
添加到字符类中,或者它会在换行符中匹配。
请注意,这也会计算引用字符串中包含的逗号,因此如果您有逗号,则会错误判断CSV行中的字段数。
答案 1 :(得分:4)
假设Notepad ++版本6+(使用PCRE Perl兼容正则表达式库)并且“ 。匹配换行符”框未在“查找”窗口中勾选:
(.*?,){11,}
如果一行包含10个以上的逗号,则该行将从该行的开头到最后一个逗号匹配。
(.*?,)
匹配除换行符之外的任何字符,尽可能少,直到下一个字符为逗号; {11,}
表示11次或更多次。
如果您希望正则表达式工作,无论“ 。匹配换行符”框是否勾选,您都可以使用:
([^\n]*?,){11,}
如果未勾选“ 。匹配换行符”框,您的正则表达式可以正常工作,但是因为它匹配任何字符贪婪,如此大量的潜在匹配可能会使应用程序挂起。在?
之后添加.*
,以便通配符 lazily 或不情愿地,即尽可能少地匹配问题。
PCRE man pages
Perl Regular Expressions documentation - 推荐。
Notepad++ "outdated" regular expressions tutorial