Regex Perl正则表达式&;数据提取/处理

Regex Perl正则表达式&;数据提取/处理,regex,json,perl,Regex,Json,Perl,我不知道从哪里开始这个。。。我的客户从他的供应商那里获得库存数据,但它们现在以不同的格式发送,下面是一个示例片段: [["BLK",[["Black","0F1315"]],[["S","813"],["M","1378"],["L","1119"],["XL","1069"],["XXL","412"],["3XL","171"]]],["BOT",[["Bottle","15451A"]],[["S","226"],["M","425"],["L","772"],["XL","509"],[

我不知道从哪里开始这个。。。我的客户从他的供应商那里获得库存数据,但它们现在以不同的格式发送,下面是一个示例片段:

[["BLK",[["Black","0F1315"]],[["S","813"],["M","1378"],["L","1119"],["XL","1069"],["XXL","412"],["3XL","171"]]],["BOT",[["Bottle","15451A"]],[["S","226"],["M","425"],["L","772"],["XL","509"],["XXL","163"]]],["BUR",[["Burgundy","73002E"]],[["S","402"],["M","530"],["L","356"],["XL","257"],["XXL","79"]]],["DNA",[["Deep Navy","000F33"]],[["S","699"],["M","1161"],["L","1645"],["XL","1032"],["XXL","350"]]],["EME",[["Emerald","0DAB5E"]],[["S","392"],["M","567"],["L","613"],["XL","431"],["XXL","97"]]],["HEA",[["Heather","C0D4D7"]],[["S","374"],["M","447"],["L","731"],["XL","386"],["XXL","115"],["3XL","26"]]],["KEL",[["Kelly","0FFF00"]],[["S","167"],["M","285"],["L","200"],["XL","98"],["XXL","45"]]],["NAV",[["Navy","002466"]],[["S","451"],["M","1389"],["L","1719"],["XL","1088"],["XXL","378"],["3XL","177"]]],["NPU",[["Purple","560D55"]],[["S","347"],["M","553"],["L","691"],["XL","230"],["XXL","101"]]],["ORA",[["Orange","FF4700"]],[["S","125"],["M","273"],["L","158"],["XL","98"],["XXL","98"]]],["RED",[["Red","FF002E"]],[["S","972"],["M","1186"],["L","1246"],["XL","889"],["XXL","184"]]],["ROY",[["Royal","1500CE"]],[["S","1078"],["M","1346"],["L","1102"],["XL","818"],["XXL","135"]]],["SKY",[["Sky","91E3FF"]],[["S","567"],["M","919"],["L","879"],["XL","498"],["XXL","240"]]],["SUN",[["Sunflower","FFC700"]],[["S","843"],["M","1409"],["L","1032"],["XL","560"],["XXL","53"]]],["WHI",[["White","FFFFFF"]],[["S","631"],["M","2217"],["L","1666"],["XL","847"],["XXL","410"],["3XL","74"]]]] 此处需要BLK,可以忽略下一块
[[“黑色”,“0F1315”]

接下来,我需要获取每个尺码的库存数据
[“S”,“813”]

因此,我应该有如下数据:

 $col = BLK
 $size = S
 $qty = 813

 $col = BLK
 $size = M
 $qty = 1278
并对数据中的每个颜色序列重复此段

数据中颜色段的数量会有所不同,其中大小分段的数量也会有所不同。此外,上浆部分的数量也会因颜色而异,即黑色可能有6种尺寸,而红色只有5种

这些数据将在循环中写入,因此类似于
print“$col:$size:$qty”
的格式将可以处理

很抱歉这么长的信息,我今天似乎无法理解这一点

问候,


Stu

对我来说,这看起来像是有效的JSON,为什么不使用正则表达式来解决这个问题呢

use JSON;
my $json_string = '[["BLK",[["Black","0F1315"]],[["S","813"...<snip>';
my $deserialized = from_json( $json_string );
使用JSON;
我的$json_字符串='[[“黑色”,“0F1315”],[[“S”,“813”;
my$deserialized=from_json($json_string);

然后您可以迭代数组并提取所需的信息片段。

我觉得这看起来像是有效的JSON,为什么不使用正则表达式来解决这个问题呢

use JSON;
my $json_string = '[["BLK",[["Black","0F1315"]],[["S","813"...<snip>';
my $deserialized = from_json( $json_string );
使用JSON;
我的$json_字符串='[[“黑色”,“0F1315”],[[“S”,“813”;
my$deserialized=from_json($json_string);
然后,您可以迭代数组并提取所需的信息片段。

基于:

(是的,对于这种特殊的格式,
eval
应该和_json中的
一样好,尽管后者更安全。但是,您应该尝试为这种格式找到一个官方规范:它真的是json还是其他什么?

基于:


(是的,对于这种特殊的格式,
eval
应该和_json
中的
一样好,尽管后者更安全。但是,您应该真正尝试为这种格式找到一个官方规范:它真的是json还是其他什么?

假设您的数据是$str,那么eval(EXPR)(Danger Will Robinson!)并处理生成的数据结构:

my $struct = eval $str;

foreach my $cref (@$struct) {
    my($color, undef, $sizerefs) = @$cref; # 3 elements in each top level
    foreach my $sizeref (@$sizerefs) {
        my($size, $qty) = @$sizeref;
        print "$color:$size:$qty\n";
    }
}

假设您有$str中的数据,那么eval(EXPR)(Danger Will Robinson!)并处理生成的数据结构:

my $struct = eval $str;

foreach my $cref (@$struct) {
    my($color, undef, $sizerefs) = @$cref; # 3 elements in each top level
    foreach my $sizeref (@$sizerefs) {
        my($size, $qty) = @$sizeref;
        print "$color:$size:$qty\n";
    }
}

谢谢Tim,你有没有机会告诉我如何处理这个结果,我还没有使用json的经验before@StuAyton:它也是(可能是巧合)看起来像是有效的Perl代码,所以如果你真的信任供应商,你可以直接通过
eval
查看结果…@IlmariKaronen但是如果我只是
eval
它就不是我们需要的格式Hanks Tim,你有没有机会告诉我如何处理结果,我没有经验使用jsonbefore@StuAyton:它也是(可能是巧合)看起来像是有效的Perl代码,所以如果你真的信任供应商,你可以通过
eval
将其输入,然后看看结果是什么…@IlmariKaronen但是如果我只是
eval
它就不是我们需要的格式了Hanks,效果很好。与供应商核实后,它肯定是JSON,但就
eval而言
goes我总是选择trust no-one选项,以防万一有什么不好的事情发生!谢谢,效果很好。与供应商联系后确定为JSON,但就
eval
而言,我总是选择trust no-one选项,以防万一有不好的事情发生!