正则表达式提取数字遇困难:如何提取C字段后的数值
解决正则提取"C"对应数值的问题
我来帮你搞定这个正则问题,顺便给你个更靠谱的替代方案!
首先看你当前正则的几个问题:
- 转义错误:你写的
(?<=C\\\"":)里,<是HTML的小于号转义,应该直接写<;而且在C#的@字符串中,双引号需要用两个双引号转义,不是反斜杠,所以C\\\""应该改成""C""。 - 正则里的空格:
\d +.\d +中的空格会被当作字面量空格,导致无法匹配连续的数字和小数点。 - 小数点未转义:
.在正则中匹配任意字符,必须写成\.才能匹配实际的小数点。
修正后的正则方案
把正则改成这样就可以正确匹配了:
var regex = new Regex(@"(?<=""C"":)\d+\.\d+(?=,)"); var test = regex.Match(content).ToString(); decimal.TryParse(test, out decimal closingPrice);
如果需要兼容整数(比如数值是123而不是123.45),可以把正则调整得更灵活:
var regex = new Regex(@"(?<=""C"":)\d+(\.\d+)?(?=,)");
更推荐的方案:用JSON解析代替正则
其实这段内容是JSON格式的片段,用专门的JSON解析库会比正则更健壮(比如遇到键值对之间有空格、数值格式变化等情况,正则容易失效,而JSON解析库能自动处理)。
用System.Text.Json(.NET Core/.NET 5+内置)
using System.Text.Json; var content = "\"L\":0.01690502,\"C\":0.01690502,\"V\":33.76590433"; // 把片段包装成合法的JSON对象 using var jsonDoc = JsonDocument.Parse($"{{{content}}}"); var root = jsonDoc.RootElement; if (root.TryGetProperty("C", out var cValue)) { decimal closingPrice = cValue.GetDecimal(); // 这里可以使用closingPrice变量 }
用Newtonsoft.Json(第三方库,兼容所有.NET版本)
using Newtonsoft.Json.Linq; var content = "\"L\":0.01690502,\"C\":0.01690502,\"V\":33.76590433"; var jsonObj = JObject.Parse($"{{{content}}}"); decimal closingPrice = jsonObj.Value<decimal>("C");
内容的提问来源于stack exchange,提问作者KrystianB
相关产品推荐
相关产品推荐

