Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl正则表达式提取数组元素_Arrays_Regex_Perl - Fatal编程技术网

Arrays Perl正则表达式提取数组元素

Arrays Perl正则表达式提取数组元素,arrays,regex,perl,Arrays,Regex,Perl,我有一个包含几行文本的文件。每行包含一个文本数组,如下所示 ["ABC","D EF","XYZ"] ["MNO","P","QR ST"] ["A"] ... 注意,引号中的一些单词之间有空格。我将它读入一个perl脚本,如下所示 while(<stdin>){ @tmp = split /,/, $_; ... do something with @tmp elements. } while(){ @tmp=split/,/,$; …使用@tmp元素执行某些操作。

我有一个包含几行文本的文件。每行包含一个文本数组,如下所示

["ABC","D EF","XYZ"]
["MNO","P","QR  ST"]
["A"]
...
注意,引号中的一些单词之间有空格。我将它读入一个perl脚本,如下所示

while(<stdin>){
  @tmp = split /,/, $_;
  ... do something with @tmp elements.
}
while(){
@tmp=split/,/,$;
…使用@tmp元素执行某些操作。
}
有没有一种简单的正则表达式方法可以将所有元素读入一个数组,而不是痛苦地拆分它并去掉引号和大括号


提前感谢

使用json解析器会更好吗?
用正则表达式解析每一行很简单

您没有说明要以何种形式存储数据,但这个简短的程序可能会有所帮助

我已经使用
Data::Dump
在处理文件后显示
@Data
数组的内容

use strict;
use warnings;

my @data;

while (<DATA>) {
  my @fields = /"([^"]*)"/g;
  push @data, \@fields;
}

use Data::Dump;
dd \@data;

__DATA__
["ABC","D EF","XYZ"]
["MNO","P","QR  ST"]
["A"]

你喜欢这个工作吗

use strict;
use Data::Dumper;

my @tmp;

while(<stdin>){
      chomp;
      s/[^a-zA-Z\d\s,]//g;
      push (@tmp, split /,/, $_);
}
print Dumper (\@tmp);
编辑

[["ABC", "D EF", "XYZ"], ["MNO", "P", "QR  ST"], ["A"]]
$VAR1 = [
          'ABC',
          'D EF',
          'XYZ',
          'MNO',
          'P',
          'QR  ST',
          'A'
        ];
$VAR1 = [
          [
            'ABC',
            'D EF',
            'XYZ'
          ],
          [
            'MNO',
            'P',
            'QR  ST'
          ],
          [
            'A'
          ]
        ];
备选方案:


看看Text::csvxs。去掉开头和结尾的大括号,然后将其余部分输入Text::csvxs。特别是如果引号中的文本中有引号和逗号,我以前使用过Text::csvxs,但发现这有点过分。我在寻找一条像正确答案一样的直线。感谢大家得出了相同的结论,除了:
while(){push@data,[/“([^”]*)”/g];}
:)这并没有给出预期的结果。没有提到您预期的输出方式。我相信它“将所有元素读取到一个数组中”,并且正则表达式可以工作。添加了一个替代方法。
$VAR1 = [
          [
            'ABC',
            'D EF',
            'XYZ'
          ],
          [
            'MNO',
            'P',
            'QR  ST'
          ],
          [
            'A'
          ]
        ];