Regex 正则表达式删除引号之间的逗号,在结束引号记事本++;

Regex 正则表达式删除引号之间的逗号,在结束引号记事本++;,regex,notepad++,Regex,Notepad++,在Notepad++中,我使用正则表达式替换CSV文件中引号之间的逗号 使用类似的例子。这是我想读的 1070,17,2,GN3-670,"COLLAR B, M STAY,","2,606.45" 除了在我的文本中,右引号前还有一个额外的逗号 正则表达式(“[^”,]+),([^”]+”似乎没有拾取最后一个逗号,结果是 1070,17,2,GN3-670,"COLLAR B M STAY,","2606.45" 我想要 1070,17,2,GN3-670,"COLLAR B M STAY

在Notepad++中,我使用正则表达式替换CSV文件中引号之间的逗号

使用类似的例子。这是我想读的

1070,17,2,GN3-670,"COLLAR B, M STAY,","2,606.45" 
除了在我的文本中,右引号前还有一个额外的逗号

正则表达式
(“[^”,]+),([^”]+”
似乎没有拾取最后一个逗号,结果是

1070,17,2,GN3-670,"COLLAR B M STAY,","2606.45"
我想要

1070,17,2,GN3-670,"COLLAR B M STAY","2606.45"
是否有一个简单的正则表达式,或者我必须使用C#

编辑:一些正则表达式给出了错误的匹配,所以我想添加另一个场景。如果我有

1070,17,2,GN3-670,"COLLAR B, M STAY,",55, FREE,"2,606.45"
我想要

1070,17,2,GN3-670,"COLLAR B M STAY",55, FREE,"2606.45"

您可以使用以下选项进行匹配:

((["])(?:(?=(\\?))\3.)*?),\2
并替换为以下内容:

\1"
请参见

这应该是可行的

查找
(“[^”]*),“


替换为
\1“

我想这就是您要寻找的:

,(?=[^”]*”(?:[^”]*“[^”]*”[^”]*”*[^”]*$)
它匹配任何后跟奇数引号的逗号。它只使用逗号,因此您可以将其替换为零

原始解决方案的问题是,每个带引号的字段只匹配一个逗号。它甚至从未尝试匹配
中的第二个逗号“COLLAR B,M STAY”,
,因此它的位置并不重要。此解决方案删除任何数量的逗号,而不管它们在字段中的位置如何

更新:此正则表达式假定您一次处理一行。如果您在包含多行的整个文档中使用它,则正则表达式可能超时。您可以通过排除行终止符(回车符和换行符)来解决此问题,如下所示:

,(?=[^”\r\n]*”(?:[^”\r\n]*“[^”\r\n]*”*[^”\r\n]*”*[^”\r\n]*$)

注意,CSV规范(比如它)说可以在引用字段中使用行终止符,所以这个正则表达式在技术上是不正确的。如果您确实需要支持多行字段,那么不妨切换到CSV库。正则表达式不能完全处理CSV,但在大多数情况下,它们已经足够好了。

看起来它仍然在B、M和STAY中保留第一个逗号。@dustmouse yes。。只有引号前的最后一个逗号应该删除:)看看OP说他们想要什么的问题。完全没有逗号:项圈B M STAY这不会删除项圈B中的第一个逗号,M STAY,@anirudha,我也得到了错误的匹配,我将编辑问题,以包括在测试仪中运行完美的场景,但我是新手。它在记事本++中不起作用,有没有简单的翻译方法?翻译应该是不必要的;可能是正则表达式本身需要调整。检查我的更新。