Arrays Perl去掉引号和空格
我正在尝试将信息从文件推送到数组。 我的文件如下所示:Arrays Perl去掉引号和空格,arrays,regex,perl,Arrays,Regex,Perl,我正在尝试将信息从文件推送到数组。 我的文件如下所示: 1.2.3.4 => '"Something"' 5.6.7.8 => '"One more time"' my $filename = '/root/file'; open(my $filehandle, '<', $filename) or die "Could not open $filename\n"; my @resultarray; while(my $line = <$file
1.2.3.4 => '"Something"'
5.6.7.8 => '"One more time"'
my $filename = '/root/file';
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
my @resultarray;
while(my $line = <$filehandle>){
chomp $line;
my @linearray = split("=>", $line);
push(@resultarray, @linearray);
}
因此,分隔符是“=>”
。因此,我尝试将信息从文件推送到数组,如下所示:
1.2.3.4 => '"Something"'
5.6.7.8 => '"One more time"'
my $filename = '/root/file';
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
my @resultarray;
while(my $line = <$filehandle>){
chomp $line;
my @linearray = split("=>", $line);
push(@resultarray, @linearray);
}
但我得到的只是:
$VAR1 = '';
$VAR2 = '"Something"';
$VAR3 = '';
$VAR4 = '"One more time"';
所以数字不见了,引号还在那里。。。。。尝试解答这个谜题大约3个小时,所以认为是时候寻求帮助了。只返回表达式返回true的列表元素<如果没有可替换的内容,code>s//将返回false,因此不会从grep
返回数字
不要使用grep
更改列表的元素。这就是map
的作用:
@stripArray = map s/\s+$//r, @resultarray;
您还可以在分隔符中包含空格,以便以后不必删除空格:
my @linearray = split /\s*=>\s*/, $line;
仅返回表达式为其返回true的列表元素<如果没有可替换的内容,code>s//将返回false,因此不会从grep
返回数字
不要使用grep
更改列表的元素。这就是map
的作用:
@stripArray = map s/\s+$//r, @resultarray;
您还可以在分隔符中包含空格,以便以后不必删除空格:
my @linearray = split /\s*=>\s*/, $line;
输入数据很容易用正则表达式处理,提取感兴趣的信息并将其放入数组
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @array;
while(<DATA>) {
my @data = /(\S+)\s+=>\s+"(.*?)"/;
push @array, \@data;
}
say Dumper(\@array);
__DATA__
1.2.3.4 => "Something"
5.6.7.8 => "One more time"
输入数据很容易用正则表达式处理,提取感兴趣的信息并将其放入数组
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
my @array;
while(<DATA>) {
my @data = /(\S+)\s+=>\s+"(.*?)"/;
push @array, \@data;
}
say Dumper(\@array);
__DATA__
1.2.3.4 => "Something"
5.6.7.8 => "One more time"
stip
和strip
是两个不同的名称。stip
和strip
是两个不同的名称。因此,它对空格和数字有帮助,但引号仍然存在<代码>我的@stripArray=map s/^'([^']*)'$/$1/,@resultarray我试图像这样删除它,但是整个字符串消失了。@semikus:您缺少了返回替换结果的/r
部分,而不是修改字符串。因此,它对空格和数字有帮助,但引号仍然存在<代码>我的@stripArray=map s/^'([^']*)'$/$1/,@resultarray“代码>我试图这样删除它,但整个字符串消失。@塞米库斯:您缺少返回替换结果的/r
部分,而不是修改字符串。最好更精确地匹配示例并检查错误:my@data=/^(\S+)\S+=>\S+”(.*?)\S*$/或警告“意外输入:$”
@ysth——若第一个数字前面有一个或多个空格字符会怎么样?然后再加上它。但只要去掉锚,它就可以匹配所有可能不应该匹配的东西t@ysth--那么,包含数据的文件应该有其应包含的内容的规范。OP没有提供此类规范,并且假设不会出现其他数据变化形式。最好更准确地匹配示例并检查错误:my@data=/^(\S+)\S+=>\S+“(.*?”\S*$/或警告“意外输入:$”
@ysth——若第一个数字前面有一个或多个空格字符会怎么样?然后再加上它。但只要去掉锚,它就可以匹配所有可能不应该匹配的东西t@ysth--那么,包含数据的文件应该有其应包含的内容的规范。OP未提供此类规范,并假设不会出现其他数据变更表。