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'
]
];