正则表达式删除双引号notepad ++之间的逗号

时间:2014-04-21 20:38:49

标签: regex 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"

我试图用reg exp来使用notepad find / replace选项。图案。 我尝试了所有类型的组合,但没有设法做到:(该文件包含100万行。

今天整个过程之后,我不再确定一个简单的正则表达式可以做什么?也许我应该用脚本... python?

4 个答案:

答案 0 :(得分:25)

mrki,这将做你想要的(用N ++测试):

搜索:("[^",]+),([^"]+")

替换:$1$2\1\2

这是如何工作的?第一个括号将字符串的开头捕获到(但不包括)逗号到组1中。第二个括号在逗号进入组2后捕获字符串的结尾。替换用字符串替换组1和第2组。

更详细:在第一个括号中,我们匹配开头的双引号,然后匹配任何不是逗号的字符。这就是[^,]+的含义。在第二个括号中,我们匹配任何不是双引号的字符[^"]+,然后是结束双引号。

答案 1 :(得分:5)

尝试以下

CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"

这将删除引号之间的逗号

答案 2 :(得分:3)

只是更新@ zx81的精彩解决方案。 假设您在引号

之间有2个逗号

然后必须按如下方式修改正则表达式搜索:

("[^",]+),([^",]+),([^"]+")

替换需要修改为

$1$2$3

所以根据逗号的数量进行修改。

我尝试过探索是否可以使用递归正则表达式,但现在似乎不可能

答案 3 :(得分:0)

对于具有“双引号内的逗号”多个实例的行,我可以想到以下perl脚本-您需要一个没有这种实例的标题行,以便知道那里应该有多少个逗号分隔的字段是。

#! /usr/bin/perl -w

use strict;

my $n_fields = "";
while (<>) {
    s/\s+$//;
    if (/^\#/) { # header line
        my @t = split(/,/);
        $n_fields = scalar(@t); # total number of fields
    } else { # actual data
        my $n_commas = $_ =~s/,/,/g; # total number of commas
        foreach my $i (0 .. $n_commas - $n_fields) { # iterate ($n_commas - $n_fields + 1) times
            s/(\"[^",]+),([^"]+\")/$1\\x2c$2/g; # single replacement per previous answers
        }
        s/\"//g; # removal of double quotes (if you want)
    }
    print "$_\n";
}