我有一个字符串可以从天气错误中下载天气数据。它解析得很好,直到温度变冷,现在我的负数被抛出。
# sample input: 0.0mm|1028.11s|75%|-4|
# expected output: precip:0.0 pressure:1028.11 humidity:75 temp:-4
$output =~ s/[^\d.|]+//g
单位已经知道,所有字母字符都被抛出,百分号符号等等,但我需要从上面的降水和大气压力中得到小数点,但我还需要负温度较低的负号。到目前为止,负号已从上述正则表达式中抛出。
感谢任何帮助。
答案 0 :(得分:0)
答案 1 :(得分:0)
拆分该行,然后删除不应存在的字符:
use v5.14;
my $string = '0.0mm|1028.11s|75%|-4|';
my @keys = qw(precip pressure humidity temp);
my %hash;
@hash{ @keys } = map { s/[^0-9.-]//gr } split /\|/, $string;
use Data::Dumper;
say Dumper( \%hash );
执行替换的程序部分位于map
:
s/[^0-9.]//gr
它使用我最喜欢的Perl 5.14功能:the /r
flag that returns the modified string instead of the count of the number of substitutions。
我也不使用\d
来匹配数字,因为Perl现在允许匹配所有UCS数字字符。相反,我确切地指定了0-9
。请参阅Know your character classes。
其余的只是一种方法,但是使用您在输出中显示的键将提取的数据转换为哈希值。