我有一个像这样的字符串
destination: 29231, 280646, 9.715e-2, 60, 109
我试图将每个数字放入变量
if ($i =~ m/^destination:\s(\d+)\,\s(\d+)\,\s(\d+\.\d+\e-\d+)\,\s(\d+)\,\s(\d+)/){
$num1 = $1;
$num2 = $2;
$num3 = $3;
$num4 = $4;
$num5 = $5;
}
似乎\s(\d+\.\d+\e-\d+)\
无效,我在哪里做错了?
答案 0 :(得分:2)
更好的方法是使用split函数。在这里,您可以将字符串拆分为由空格(\s+
)分隔的元素,如果它们是数字(/^\d+/
),则将它们打印出来(或重命名它们或其他)。
use strict;
use warnings;
my $string = 'destination: 29231, 280646, 9.715e-2, 60, 109';
my @split = split(/\s+/, $string);
foreach (@split){
s/,//; # get rid of commas
print "$_\n" if /^\d+/;
}
打印:
29231
280646
9.715e-2
60
109
答案 1 :(得分:2)
解决方案取决于您的字符串的确切格式,但您可以找到所有不是空格或逗号的字段并删除第一个字段,如下所示
use strict;
use warnings;
my $string = 'destination: 29231, 280646, 9.715e-2, 60, 109';
my @numbers = $string =~ /[^\s,]+/g;
shift @numbers;
print "$_\n" for @numbers;
<强>输出强>
29231
280646
9.715e-2
60
109
答案 2 :(得分:-2)
发现它,只是在\ e上犯了错误,
正确的表达应该是:\s(\d+\.\d+\w-\d+)\