Perl:Replace all,位于Perl中两个字符之间

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

我是perl新手

我有一个输入字符串,比如 戴夫,30,“6000”,“4500”,“60000”,“1000”

我需要替换所有引号以及引号之间的所有逗号

我的预期产出:
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
返回修改后的字符串)。