以逗号分隔,但仅当不在括号中时 [英] Split on comma, but only when not in parenthesis
本文介绍了以逗号分隔,但仅当不在括号中时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用逗号分隔符对字符串进行拆分
I am trying to do a split on a string with comma delimiter
my $string='ab,12,20100401,xyz(A,B)';
my @array=split(',',$string);
如果我像上面那样进行拆分,数组就会有值
If I do a split as above the array will have values
ab
12
20100401
xyz(A,
B)
我需要如下值.
ab
12
20100401
xyz(A,B)
(不应将 xyz(A,B) 拆分为 2 个值)我该怎么做?
(should not split xyz(A,B) into 2 values) How do I do that?
推荐答案
use Text::Balanced qw(extract_bracketed);
my $string = "ab,12,20100401,xyz(A,B(a,d))";
my @params = ();
while ($string) {
if ($string =~ /^([^(]*?),/) {
push @params, $1;
$string =~ s/^\Q$1\E\s*,?\s*//;
} else {
my ($ext, $pre);
($ext, $string, $pre) = extract_bracketed($string,'()','[^()]+');
push @params, "$pre$ext";
$string =~ s/^\s*,\s*//;
}
}
这个支持:
- 嵌套括号;
- 空字段;
- 任意长度的字符串.
这篇关于以逗号分隔,但仅当不在括号中时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文