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

如何在C#中从字符串提取指定浮点数并排除其他数字

解决方案:提取字符串中的价格数字

嘿,我明白你的困扰了!之前的正则之所以只拿到7,是因为它匹配了字符串里第一个符合数字格式的内容。要精准提取价格8.25,我们可以利用价格后面的¢符号这个明确标识来定位,或者根据字符串结构取最后一个数字(前者更可靠)。

方法一:利用价格符号做正向预查(推荐)

这个思路是通过正则的正向预查,只匹配紧跟在¢前面的数字,完全避开前面的年份数字7。

正则表达式

\d+(?:\.\d+)?(?=¢)
  • \d+:匹配1个或多个整数部分
  • (?:\.\d+)?:可选的小数部分(非捕获组,避免多余分组干扰)
  • (?=¢):正向预查,确保匹配的数字后面紧跟¢符号,精准锁定价格位置

C# 代码示例

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "You have selected: 7 Year Fixed Price 8.25¢/item";
        Match priceMatch = Regex.Match(input, @"\d+(?:\.\d+)?(?=¢)");
        
        if (priceMatch.Success)
        {
            Console.WriteLine("提取到的价格:" + priceMatch.Value); // 输出 8.25
        }
        else
        {
            Console.WriteLine("未找到匹配的价格");
        }
    }
}

方法二:取最后一个匹配的数字(仅适用于固定格式)

如果你的字符串格式永远是「年份数字在前,价格数字在最后」,也可以先匹配所有数字,再取最后一项:

C# 代码示例

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "You have selected: 7 Year Fixed Price 8.25¢/item";
        MatchCollection allNumbers = Regex.Matches(input, @"-?\d+(?:\.\d+)?");
        
        if (allNumbers.Count > 0)
        {
            string price = allNumbers[allNumbers.Count - 1].Value;
            Console.WriteLine("提取到的价格:" + price); // 输出 8.25
        }
    }
}

⚠️ 注意:这个方法的局限性很大,如果后续字符串新增其他数字,就会提取错误,所以更推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:00