Regex 正则表达式不符合大括号中的值
我在Notepad++v6.6.8中使用以下正则表达式Regex 正则表达式不符合大括号中的值,regex,Regex,我在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","" 但是,它通过datetime的第二个匹
\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",""
但是,它通过datetime的第二个匹配项进行匹配。出于好奇,我将大括号中的值更改为
15
,它返回了完全相同的匹配。有人能解释一下为什么会这样吗?我正在尝试快速计数CSV文件中第15个位置为空(“
”)的每条记录,我认为结果与几千条记录相差。模式第一部分的第14个实例与”,“1/9/2007 12:00:00 AM”
匹配。仅仅因为匹配不是贪婪的,并不意味着它不会为了匹配而扩展
你可以试试类似的东西
\n("[^"]*",){14}""
或者使用^anchor,而不是匹配换行符
^("[^"]*",){14}""
据报道,它确实符合这条线。考虑到示例数据,我不完全清楚它应该匹配还是不应该匹配,但RegExBuddy同意这是一个匹配
有人能解释一下为什么会这样吗
我认为这是因为(“*?”,)
——具体地说,你可以在没有任何内容的情况下匹配引号。这将允许根据量词计算任何引号 (“*?”,){14}“
进行贪婪匹配。这个(“*?”,){14}
regex将匹配精确的14次出现,并且regex引擎还尝试匹配以下”
模式。但是在第14次出现“*?”之后没有”,
在那个地方有一个字符串“1/9/2007 12:00:00 AM”,
,它不是“
,所以正则表达式引擎向上移动到下一个”,
。一旦找到,它将匹配到该字符串以获得匹配
通过从模式中删除以下“
来查看差异。还有。谢谢你的解释。你对我如何检查第15个职位是否为空有什么建议吗?