我的格式有以下数据。
##############################
# A_Data
##############################
A_Data += data1
data2
data3
data4
###############################
# B_Data
###############################
B_Data += data5
data6
###############################
# C_Data
###############################
C_Data += data7
我想分开提取数据,如:
A_Data (e.g.Array)
data1
data2
data3
data4
和B_data和C_Data类似,以便我可以单独显示它。 用我的脚本,我能够得到
A_Data += data1
data2
data3
data4
B_Data += data5
data6
C_Data += data7
我知道它的多线模式的情况,我已经多次用Google搜索,但我无法得到它。 请帮我解决这个问题,因为我是新手,在perl中使用正则表达式。
到目前为止我尝试过:
我将文件数据放在一个数组中,然后尝试应用正则表达式
@array1;
for (my $i=0;$i < $length;$i++)
{
$data[$i]=~ s/#.*//;
#$data[$i]=~ /[A_Data](.*?)[B_Data]/; ## trying to get data in between those two data.
print $data[$i]."\n";
}
答案 0 :(得分:2)
解决方案取决于数据文件的精确格式,但这适用于您提供的示例
use strict;
use warnings;
open my $fh, '<', 'data_file.txt' or die $!;
my $tag;
my $data;
while (<$fh>) {
chomp;
s/#.*//;
next unless /\S/;
$tag = $1 if s/^(\w+)\s*\+=\s*//;
push @{ $data->{$tag} }, $_ if $tag;
}
use Data::Dump;
dd $data;
<强>输出强>
{
A_Data => ["data1", "data2", "data3", "data4"],
B_Data => ["data5", "data6"],
C_Data => ["data7"],
}