Perl新手技术问询:如何从一行提取数值并检查大于10的偶数?
Perl新手提取文本数字并检查奇偶的解决方案
嘿,别慌!作为Perl新手,从文本里提取数字其实没那么难,我一步步给你捋清楚,顺便把后续的奇偶检查也一起讲了~
第一步:从文本行提取数字
Perl的正则表达式是处理这类文本提取的利器,给你两种常用的提取方式:
提取正整数
如果你的文本里只有正整数,用这个简单的正则就能搞定:
my $line = "你的文本内容在这里,比如abc 12 def 5 ghi 20"; my @numbers = $line =~ /(\d+)/g; # @numbers数组里现在就存着所有提取到的整数啦
- 解释:
\d+表示匹配1个或多个数字,g是全局匹配标志,会把行里所有符合的数字都找出来,而不是只提取第一个。
提取更全面的数字(负数、浮点数)
如果文本里有负数(比如-8)或者小数(比如15.3),可以用这个更通用的正则:
my @numbers = $line =~ /(-?\d+\.?\d*)/g;
- 拆解一下这个正则:
-?:匹配可选的负号(处理负数)\d+:匹配整数部分\.?:匹配可选的小数点\d*:匹配可选的小数部分
第二步:检查大于10的数字是否为偶数
提取到数字后,我们可以遍历数组,逐个判断:
foreach my $num_str (@numbers) { # 把字符串转成数值类型,避免字符串比较的坑 my $num = $num_str + 0; if ($num > 10) { if ($num % 2 == 0) { print "$num 是大于10的偶数\n"; } else { print "$num 大于10但不是偶数\n"; } } else { print "$num 不大于10,跳过奇偶检查\n"; } }
- 为什么要转成数值?因为正则提取出来的是字符串,直接用字符串和数字比较可能会出问题(比如"100"和"9"字符串比较时,"100"会比"9"小,因为按字符顺序比对),转成数值就安全了。
完整示例脚本
把上面的步骤整合起来,给你一个可以直接运行的示例:
#!/usr/bin/perl use strict; use warnings; # 新手强烈建议开启,能帮你发现很多隐藏错误 # 替换成你实际要处理的文本行 my $line = "订单编号:123,数量:15,总价:24.5,折扣:-10"; # 提取所有数字 my @numbers = $line =~ /(-?\d+\.?\d*)/g; # 逐个检查 foreach my $num_str (@numbers) { my $num = $num_str + 0; if ($num > 10) { if ($num % 2 == 0) { print "✅ $num 是大于10的偶数\n"; } else { print "⚠️ $num 大于10但不是偶数\n"; } } else { print "ℹ️ $num 不大于10,无需检查奇偶\n"; } }
运行这个脚本,你就能看到每个数字的检查结果啦~
内容的提问来源于stack exchange,提问作者Viqtoh
相关产品推荐
相关产品推荐

