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

C#正则表达式匹配整数与浮点数的适配方案(解析配置字符串)

解决正则匹配整数/浮点数兼容问题

问题场景

从文件读取的字符串格式如下:

string line = rows=1500,cols=1500,res=0.1,tl_y=75,tl_x=-75,br_y=-75,br_x=75

原使用的正则表达式仅能匹配带小数点的浮点数,当tl_y、tl_x、br_y、br_x的值为整数(无小数点)时匹配失败:

string pattern = @"rows=(\d+),cols=(\d+),res=(\d+\.\d+),tl_y=(-?\d+\.\d+),tl_x=(-?\d+\.\d+),br_y=(-?\d+\.\d+),br_x=(-?\d+\.\d+)";

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(line, pattern);

修改后的正则表达式

将匹配坐标值的部分从强制要求小数点的格式,改为可选小数点的格式,修改后的正则:

string pattern = @"rows=(\d+),cols=(\d+),res=(\d+\.\d+),tl_y=(-?\d+(?:\.\d+)?),tl_x=(-?\d+(?:\.\d+)?),br_y=(-?\d+(?:\.\d+)?),br_x=(-?\d+(?:\.\d+)?)";

关键修改说明

  • 原表达式中(-?\d+\.\d+)要求必须包含小数点和小数部分,无法匹配整数
  • 修改为(-?\d+(?:\.\d+)?):
    • \d+:匹配1个或多个数字(整数部分)
    • (?:\.\d+)?:非捕获组,匹配可选的小数点+小数部分,?表示该部分可以不存在,这样既支持整数也支持浮点数

完整使用示例

string line = "rows=1500,cols=1500,res=0.1,tl_y=75,tl_x=-75.5,br_y=-75,br_x=75.2";
string pattern = @"rows=(\d+),cols=(\d+),res=(\d+\.\d+),tl_y=(-?\d+(?:\.\d+)?),tl_x=(-?\d+(?:\.\d+)?),br_y=(-?\d+(?:\.\d+)?),br_x=(-?\d+(?:\.\d+)?)";

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(line, pattern);

if (match.Success)
{
    int rows = int.Parse(match.Groups[1].Value);
    int cols = int.Parse(match.Groups[2].Value);
    double res = double.Parse(match.Groups[3].Value);
    double tlY = double.Parse(match.Groups[4].Value);
    double tlX = double.Parse(match.Groups[5].Value);
    double brY = double.Parse(match.Groups[6].Value);
    double brX = double.Parse(match.Groups[7].Value);
    // 后续逻辑处理
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:15:16