我正在尝试从记事本++中的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?
答案 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";
}