我在Notepad ++ v6.6.8中使用以下正则表达式
\n(".*?",){14}""
它匹配它应该的行,但它也匹配它不应该的行。例如,我不希望它匹配以下行:
"Sold","421","421","67","1/9/2007 12:00:00 AM","","3","","","","","","","","1/9/2007 12:00:00 AM","","","","True","4601","1/3/2011 5:44:17 PM",""
但是,它会在第二次出现日期时匹配。出于好奇,我将花括号中的值更改为15
,并返回完全相同的匹配。有人能解释一下为什么会这样吗?我试图快速计算CSV文件中第15个位置为空(""
)的每条记录,我认为结果是几千条记录。
答案 0 :(得分:1)
模式第一部分的第14个实例匹配"","1/9/2007 12:00:00 AM"
。仅仅因为比赛不贪婪并不意味着如果需要进行比赛就不会延长。
您可以尝试类似
的内容\n("[^"]*",){14}""
或者使用^锚而不是匹配换行符
^("[^"]*",){14}""
答案 1 :(得分:1)
(".*?",){14}""
进行贪婪的比赛。此(".*?",){14}
正则表达式将匹配确切的14次出现,并且正则表达式引擎也会尝试匹配以下""
模式。但是在""
第14次出现之后,".*?",
没有"1/9/2007 12:00:00 AM",
有一个不是""
的字符串"",
,所以正则表达式引擎向上移动到""
下一个{{1}}。一旦找到,它就会匹配该字符串以获得匹配。
答案 2 :(得分:0)
根据RegexBuddy,它确实匹配该行。在给出示例数据的情况下,我并不完全清楚它应该或不应该匹配,但RegExBuddy同意它是匹配的。
有人可以向我解释为什么会这样吗?
我认为这是因为(".*?",)
- 特别是,您可以匹配报价而没有任何内容。这将允许任何报价计入量词。