我需要解析的数据如下:
[fild1, filed2, .... filedn] , [filed1, filed2, .... filedn] .....
我将其称为CSV数据的特殊形式,因为有两种逗号:
因此,在这种情况下,使用split(',' , $data)
将无法满足我的需求,即解析数据并获取数据中的每条记录。
答案 0 :(得分:5)
这应该做的工作:
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'
];
答案 1 :(得分:2)
如何:my @parts = split(/\]/, $data);
,然后您可以迭代@parts
,删除标题[
并再次拆分“,”
您也可以像这样进行初始拆分:
my @parts = split(/\] , /, $data);
这将为您节省更多的清理工作。如果数据的空格是一致的,请确保只使用此方法。
答案 2 :(得分:1)
my @a = split /\]\s*,\s*\[/, $data;
并摆脱第一个'['和最后']'。
答案 3 :(得分:0)
以下是一个快速示例,假设$data
中的值有效。
my @data = map { [ split ',', $_ ] } $data =~ / \[ ([^\[\]]*) \] ,? /xg;
答案 4 :(得分:0)
您还可以尝试Text :: CSV或Text :: CSV_XS。去CPAN下载。