Perl RegEx适用于所有可能带小数和负数的数字

时间:2014-11-16 06:09:39

标签: regex perl

我有一个字符串可以从天气错误中下载天气数据。它解析得很好,直到温度变冷,现在我的负数被抛出。

# sample input: 0.0mm|1028.11s|75%|-4|
# expected output: precip:0.0 pressure:1028.11 humidity:75 temp:-4
$output =~ s/[^\d.|]+//g

单位已经知道,所有字母字符都被抛出,百分号符号等等,但我需要从上面的降水和大气压力中得到小数点,但我还需要负温度较低的负号。到目前为止,负号已从上述正则表达式中抛出。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

[^\d.|-]+

试试这个。看看demo。在你的角色列表中添加-

http://regex101.com/r/xV4eL5/3

答案 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

其余的只是一种方法,但是使用您在输出中显示的键将提取的数据转换为哈希值。