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
相关产品推荐
相关产品推荐

