代码之家  ›  专栏  ›  技术社区  ›  chenyf

如何基于逗号而不是双引号中的逗号拆分字符串

  •  8
  • chenyf  · 技术社区  · 6 年前

    " :

    my $str = '1,2,3,"4,5,6"';
    .say for $str.split(/','/) # Or use comb?
    

    输出应为:

    1
    2
    3
    "4,5,6"
    
    3 回复  |  直到 5 年前
        1
  •  10
  •   wamba    6 年前

    comb ,拿走任何东西,但不要 " , 或者取带引号的字符串

    my $str = '1,2,3,"4,5,6",7,8';
    .say for $str.comb: / <-[",]>+ | <["]> ~ <["]>  <-["]>+ / ;
    
        2
  •  9
  •   chenyf    6 年前

    正如@melpomene所建议的,使用 Text::CSV 模块也工作。

    use Text::CSV;
    
    my $str = '123,456,"78,91",abc,"de,f","ikm"';
    for csv(in => csv(in => [$str], sep_char => ",")) -> $arr {
       .say for @$arr;
    }
    

    123
    456
    78,91
    abc
    de,f
    ikm
    
        3
  •  1
  •   Peter Mortensen stimpy    6 年前

    这可能有助于:

    my $str = ‘1,2,3,"4,5,6",7,8’;
    
    for $str.split(/ \" \d+ % ',' \"/, :v) -> $l {
      if $l.contains('"') {
        say $l.Str;
      } else {
        .say for $l.comb(/\d+/);
      }
    }
    

    输出:

    1
    2
    3
    "4,5,6"
    7
    8
    
    推荐文章