Regex 如何使用Perl解析数据中带有内部逗号的CSV数据?
我需要解析的数据如下所示:Regex 如何使用Perl解析数据中带有内部逗号的CSV数据?,regex,perl,Regex,Perl,我需要解析的数据如下所示: [fild1, filed2, .... filedn] , [filed1, filed2, .... filedn] ..... 我称之为特殊形式的数据,因为有两种逗号: []对之外的逗号是 作为两者之间的分隔物 不同的记录 []对中的逗号是 作为两者之间的分隔物 不同的领域 因此,在这种情况下,使用split(',',$data)将无法满足我的需要,即解析数据并获取数据中的每条记录 怎么样:my@parts=split(/\]/,$data),然后您可以迭代@
[fild1, filed2, .... filedn] , [filed1, filed2, .... filedn] .....
我称之为特殊形式的数据,因为有两种逗号:
因此,在这种情况下,使用
split(',',$data)
将无法满足我的需要,即解析数据并获取数据中的每条记录 怎么样:my@parts=split(/\]/,$data)
,然后您可以迭代@parts
,删除标题[
,并再次以“,”分隔
也可以这样进行初始拆分:
my@parts=split(/\],/,$data)代码>,这将节省您以后的清理工作。只需确保只有在数据的空格一致时才使用此方法。如何:my@parts=split(/\]/,$data)
,然后您可以迭代@parts
,删除标题[
,并再次以“,”分隔
也可以这样进行初始拆分:
my@parts=split(/\],/,$data)代码>,这将节省您以后的清理工作。只需确保只有在数据的空格一致时才使用此方法。这应该可以完成以下任务:
my @out = map{[split/,/]} $data =~ /\[([^\]]+)\]/g;
例如:
use Data::Dumper;
$data='[1,2,3],[4,5],[6]';
@a=map{[split/,/]} $data =~ /\[([^\]]+)\]/g;
print Dumper @a;
输出:
$VAR1 = [
'1',
'2',
'3'
];
$VAR2 = [
'4',
'5'
];
$VAR3 = [
'6'
];
这应该可以做到:
my @out = map{[split/,/]} $data =~ /\[([^\]]+)\]/g;
例如:
use Data::Dumper;
$data='[1,2,3],[4,5],[6]';
@a=map{[split/,/]} $data =~ /\[([^\]]+)\]/g;
print Dumper @a;
输出:
$VAR1 = [
'1',
'2',
'3'
];
$VAR2 = [
'4',
'5'
];
$VAR3 = [
'6'
];
去掉第一个“[”和最后一个“]”
然后去掉第一个“[”和最后一个“]”。这里有一个简单的例子,它假设$data
中的值是有效的
my @data = map { [ split ',', $_ ] } $data =~ / \[ ([^\[\]]*) \] ,? /xg;
下面是一个快速示例,它假设$data
中的值有效
my @data = map { [ split ',', $_ ] } $data =~ / \[ ([^\[\]]*) \] ,? /xg;
您还可以尝试Text::CSV或Text::csvxs。转到CPAN下载。您也可以试用Text::CSV或Text::csvxs。转到CPAN下载。对于拆分来说,这是一个糟糕的正则表达式,因为拆分的第一个参数总是被解释为正则表达式。对于拆分来说,这是一个糟糕的正则表达式,因为拆分的第一个参数总是被解释为正则表达式。谁说了Python?@carillonator,这只是标准的Python vs Perl火焰诱饵。忽略它或标记它。可悲的是,这是非常典型的。谁说过Python?carillonator,这只是标准的Python vs Perl火焰诱饵。忽略它或标记它。可悲的是,这种情况相当典型。