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

时间:2014-05-13 02:59:17

标签: arrays regex perl

我有一个包含多行文字的文件。每行包含一个文本数组,表示如下

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

注意,引号中的一些单词之间有空格。我将其读入一个类似于下面的perl脚本

while(<stdin>){
  @tmp = split /,/, $_;
  ... do something with @tmp elements.
}

是否有一种简单的正则表达方式将所有元素读入数组而不是痛苦地将其拆分并删除引号和括号?

提前致谢

3 个答案:

答案 0 :(得分:3)

使用正则表达式解析每一行很简单。

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

我在处理文件后使用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"]

<强>输出

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

答案 1 :(得分:0)

答案 2 :(得分:0)

这样的事情会起作用吗?

use strict;
use Data::Dumper;

my @tmp;

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

<强>输出

$VAR1 = [
          '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);

<强>输出

$VAR1 = [
          [
            'ABC',
            'D EF',
            'XYZ'
          ],
          [
            'MNO',
            'P',
            'QR  ST'
          ],
          [
            'A'
          ]
        ];