Perl:这是正确的还是坏的正则表达式,以及如何改进它?
发布时间:2020-12-15 21:58:24 所属栏目:大数据 来源:网络整理
导读:我正在尝试捕获传感器的温度输出,为此我有以下相关线: temp1: +39.5 C (crit = +105.0 C)Core 0: +40.0 C (high = +100.0 C,crit = +100.0 C)Core 1: +40.0 C (high = +100.0 C,crit = +100.0 C) 我只需要每行的第一个温度(39.5,40.0,40.0).问题当然是因为
我正在尝试捕获传感器的温度输出,为此我有以下相关线:
temp1: +39.5 C (crit = +105.0 C) Core 0: +40.0 C (high = +100.0 C,crit = +100.0 C) Core 1: +40.0 C (high = +100.0 C,crit = +100.0 C) 我只需要每行的第一个温度(39.5,40.0,40.0).问题当然是因为在“Core 0”/“Core 1”中有一个额外的空间,所以我不能真正使用单词编号. 我已经提出了以下正则表达式,它确实有效,但是我被告知使用.*对正则表达式来说是一种有点懒惰和肮脏的方法. $core_data =~ s/^.*+(.*)C .*$/$1/g; 我想知道,有没有更严格或更好的方法来实现这一目标,还是我做得好? 解决方法
一个更简洁的正则表达式
/+(d+.?d*) C/ 这将匹配第一个温度和可选的十进制值. #!/usr/bin/perl use strict; use warnings; my $re = qr{+(d+.?d*) C}; while (my $line = <DATA>){ $line =~$re and print $1,"n"; } __DATA__ temp1: +39.5 C (crit = +105.0 C) Core 0: +40.0 C (high = +100.0 C,crit = +100.0 C) 输出: 39.5 40.0 40.0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |