You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:44