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

如何用正则表达式提取'Acres'前的整数及小数子串

解决正则提取Acres前整数/小数的问题

嘿,刚接触正则别发愁!我帮你把能同时匹配整数和小数的正则方案整理好了,完美适配你的所有测试场景。

核心需求回顾

你需要从字符串中提取紧邻"Acres"(不区分大小写)之前的数字,数字可以是整数(如450、50)或小数(如0.44)。之前的正则要么只能匹配整数,要么只能匹配小数,现在我们把它整合起来。

最终正则表达式

(\d+(?:\.\d+)?)(?=\s+ACRES)

各部分解释:

  • \d+:匹配一个或多个数字(对应整数部分)
  • (?:\.\d+)?:这是一个非捕获组,匹配小数点+至少一位数字,末尾的?表示这个小数部分是可选的——这样整数和小数都能被匹配到
  • (?=\s+ACRES):正向预查,确保数字后面跟着一个或多个空格和"ACRES"(配合忽略大小写模式,能匹配"Acres""acres"等各种大小写组合)

C# 代码示例

因为你提到用String类的方法太繁琐,这里直接给正则的实现代码,记得开启忽略大小写模式:

using System;
using System.Text.RegularExpressions;

class AcreExtractor
{
    static void Main()
    {
        // 你的测试用例
        string[] testCases = {
            "Lot Containing 450 Acres",
            "3 flats have an area of 50 Acres",
            "LOT CONTAINING 0.44 ACRES"
        };

        // 初始化正则,开启忽略大小写
        Regex acreRegex = new Regex(@"(\d+(?:\.\d+)?)(?=\s+ACRES)", RegexOptions.IgnoreCase);

        foreach (string input in testCases)
        {
            Match result = acreRegex.Match(input);
            if (result.Success)
            {
                Console.WriteLine($"原字符串:{input}\n提取结果:{result.Groups[1].Value}\n");
            }
        }
    }
}

运行这段代码,输出会完全符合你的预期:

原字符串:Lot Containing 450 Acres
提取结果:450

原字符串:3 flats have an area of 50 Acres
提取结果:50

原字符串:LOT CONTAINING 0.44 ACRES
提取结果:0.44

为什么这个方案比之前的好?

  • 之前的整数正则(\d+)(?=\sACRES)没法匹配小数,而你修改后的小数正则(\d+[.]\d+)(?=\sACRES)又必须要求有小数点,所以整数匹配失败
  • 现在的正则通过(?:\.\d+)?把小数部分设为可选,同时用\s+兼容数字和Acres之间的多个空格(比单一\s更鲁棒),再配合忽略大小写,覆盖了所有你提到的场景

内容的提问来源于stack exchange,提问作者WorksOnMyLocal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:41