我需要找到包含超过 10 个“,”的行(我在导入 CSV 时出错,所以我需要手动更正)。我正在使用 Notepad++,所以我不需要写 reqex 来匹配行,只需要匹配逗号。
(.*,.*){11,100} //does not work
我需要找到包含超过 10 个“,”的行(我在导入 CSV 时出错,所以我需要手动更正)。我正在使用 Notepad++,所以我不需要写 reqex 来匹配行,只需要匹配逗号。
(.*,.*){11,100} //does not work
.*
也匹配逗号。您需要排除具有否定字符类的那些([^,]
匹配除逗号以外的任何字符):
^[^,\r\n]*(?:,[^,\r\n]*){11,}$
我已添加\r\n
到字符类中,否则它将跨换行符匹配。
但是请注意,这也会计算引用字符串中包含的逗号,因此如果您有逗号,您将误判 CSV 行中的字段数。
假设 Notepad++ 版本 6+(它使用 PCRE Perl 兼容的正则表达式库)并且 ' . 匹配换行符' 框未在“查找”窗口中打勾:
(.*?,){11,}
如果一行包含超过 10 个逗号,这将从行首匹配到最后一个逗号。
(.*?,)
尽可能少地匹配除换行符之外的任何字符,直到下一个字符是逗号;{11,}
表示 11 次或更多次。
如果您希望正则表达式工作,无论 ' 是否。匹配换行符'框被勾选,你可以使用:
([^\n]*?,){11,}
如果 ' ,您的正则表达式确实有效。匹配换行符'框没有打勾,但由于它贪婪地匹配任何字符,可能有如此大量的潜在匹配项,它可能会挂起应用程序。?
在之后添加.*
以便通配符懒惰地或勉强地匹配,即尽可能少地匹配,应该可以解决问题。