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

正则表达式提取数字遇困难:如何提取C字段后的数值

解决正则提取"C"对应数值的问题

我来帮你搞定这个正则问题,顺便给你个更靠谱的替代方案!

首先看你当前正则的几个问题:

  • 转义错误:你写的(?&lt;=C\\\"":)里,&lt;是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:39:19