我有一个只包含一个字符串的数组,它是哈希的值:
%hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"])
如何从散列值中分割" unit"
- s并将其保存到数组中?
新数组应该是这样的:
@array=["Value1", "Value2", "Value3"]
我试过这种方式:
@array=split(/\s\w\(\w\)\,/, $hash{key});
答案 0 :(得分:1)
在逗号上拆分字符串,然后在最后剥去单位。
map(s/\s.*$//, @array = split(/,\s*/, $hash{'key'}[0]));
答案 1 :(得分:1)
这是另一种选择:
use strict;
use warnings;
use Data::Dumper;
my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array = $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
输出:
$VAR1 = [
'1567',
'2070',
'2.456e-2',
'417',
'12'
];
答案 2 :(得分:1)
另一种选择:
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);
my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];
$, = "\n";
print @array;
答案 3 :(得分:0)
你可以用一个相对简单的正则表达式来完成:
@array = $hash{'key'}[0] =~ m/\s*(\S+)\s+\S+,?/g;
要知道的重要一点是,使用/g
标志,正则表达式匹配器会返回所有捕获的($1
,$2
等)组,从而全局匹配字符串。这个正则表达式有一个这样的组。
我的假设是:
如果这些都不是有效的假设,您可以使用与您的数据匹配的更具体的内容替换正则表达式的两个\S+
部分。