如何用正则表达式提取'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
相关产品推荐
相关产品推荐

