Как разбить строку на основе запятой, но не на запятой в двойных кавычках - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу разбить эту строку на основе запятой, но не на основе запятой в двойных кавычках ":

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

Выходные данные должны быть:

1
2
3
"4,5,6"

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

быстрое решение с comb, возьми что угодно, но не " и , или взять строку в кавычках

my $str = '1,2,3,"4,5,6",7,8';
.say for $str.comb: / <-[",]>+ | <["]> ~ <["]>  <-["]>+ / ;
0 голосов
/ 17 сентября 2018

как предложено @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
0 голосов
/ 17 сентября 2018

Это может помочь:

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
...