C#中如何无需大量if语句与Substring提取Length后的数值
用正则表达式高效提取Length后的数值
嘿,这个场景用正则表达式来处理简直完美,完全不用写一堆if判断或者手动Substring截取,代码简洁还不容易出错!
核心思路
你的字符串里所有Length: 后面的数值都遵循固定模式:要么是纯数字,要么是带逗号的数字组合。我们可以用正则匹配这个固定模式,直接捕获需要的数值部分。
正则表达式写法
Length: ([\d,]+)
Length::精确匹配前缀,确保我们找的是目标字段([\d,]+):捕获组,匹配一个或多个数字(\d)或逗号(,),正好覆盖你场景里带逗号或不带逗号的数值情况
代码示例(常用语言)
C# 实现
using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "Offset: 23,123 Length: 504 some more text some more text 213I Offset: 23,123 Length: 504 some more text Offset: 23,123 Length: 504 Offset: 23 Length: 504,10 some more text some more text 213I"; // 定义正则模式 string pattern = @"Length: ([\d,]+)"; // 匹配所有符合条件的结果 foreach (Match match in Regex.Matches(input, pattern)) { string lengthValue = match.Groups[1].Value; Console.WriteLine($"提取到的Length数值:{lengthValue}"); // 如果需要转成数值类型(比如去掉逗号转整数) int numericValue = int.Parse(lengthValue.Replace(",", "")); Console.WriteLine($"转成整数后:{numericValue}"); } } }
Python 实现
import re input_str = "Offset: 23,123 Length: 504 some more text some more text 213I Offset: 23,123 Length: 504 some more text Offset: 23,123 Length: 504 Offset: 23 Length: 504,10 some more text some more text 213I" pattern = r"Length: ([\d,]+)" # 提取所有匹配的数值 matches = re.findall(pattern, input_str) for num_str in matches: print(f"提取到的Length数值:{num_str}") # 可选:转成数值类型 num = int(num_str.replace(",", "")) print(f"转成整数后:{num}")
补充说明
如果之后需要对提取到的带逗号的数值做计算,只需要先把逗号去掉,再转成对应的数值类型(整数/浮点数)就行,这一步也很简单。
内容的提问来源于stack exchange,提问作者Mark O Shea
相关产品推荐
相关产品推荐

