Perl:Replace all,位于Perl中两个字符之间
我是perl新手 我有一个输入字符串,比如 戴夫,30,“6000”,“4500”,“60000”,“1000” 我需要替换所有引号以及引号之间的所有逗号 我的预期产出:Perl:Replace all,位于Perl中两个字符之间,perl,Perl,我是perl新手 我有一个输入字符串,比如 戴夫,30,“6000”,“4500”,“60000”,“1000” 我需要替换所有引号以及引号之间的所有逗号 我的预期产出: Dave,3060004500600001000这是我想出的一个解决方案。不是最优雅的,但也可以 #!/usr/bin/perl use strict; use warnings; my $s="Dave,30,\"6,000\",\"4,500
Dave,3060004500600001000这是我想出的一个解决方案。不是最优雅的,但也可以
#!/usr/bin/perl
use strict;
use warnings;
my $s="Dave,30,\"6,000\",\"4,500\",\"60,000\",\"1,000\"";
my $q=0;
my $r = "";
my @a = unpack "(a1)*",$s;
foreach (@a)
{
if ($_ eq '"')
{
$q=1-$q;
next;
}
next
if $_ eq "," && $q;
$r.=$_;
}
printf "%s\n",$r;
我强烈建议使用Text::CSV之类的工具来解析逗号分隔的值。有很多微妙的方式让CSV文件成为令人头疼的问题
#!/usr/bin/env perl
use feature qw(say);
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new();
if ($csv->parse(q{Dave,30,"6,000","4,500","60,000","1,000"})) {
# strip extraneous commas
my @fields = map { (my $s = $_) =~ s/,//; $s } $csv->fields;
# print out the results
$csv->combine(@fields);
say $csv->string;
}
这会打印出一行内容,Dave,3060004500600001000您能展示一下您的尝试吗,这样我们就可以帮助您了?一般来说,这是CSV数据,您需要使用一个库来解析该数据,然后您可以以任何方式输出它。顺便说一句:您的“预期输出”并不表示您“替换”了逗号?很抱歉我的解释不正确。我想替换(删除)引号中的所有逗号。“6000”变为6000,依此类推。步骤1:解析为CSV。步骤2:删除每行中每个值的逗号。我之所以说CSV解析,是因为你可能会在引号中加引号,因为这是非常…不寻常的。谢谢你的想法。但是出于当前的考虑,我想问一下,我们是否有办法首先在引号中标识子字符串(使用regex或其他方法),然后替换该子字符串中的所有逗号,然后将其放回原始位置。这应该行得通吧?步骤1:从主字符串中识别6000(类似于其他情况)步骤2:从6000中删除并使其成为6000步骤3:使用步骤2中获得的6000替换主字符串中的“6000”,但唯一的问题是如何识别步骤1的子字符串设置“步骤1的子字符串”是“解析”部分,最好由库
map{s/,//gr}
完成(g
删除所有逗号,r
返回修改后的字符串)。