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

如何在C#中提取字符串末尾']'前的数字(支持单/多位数字场景)

如何在C#中提取字符串末尾']'前的数字(支持单/多位数字场景)

嗨,看起来你已经摸到了门道,但最后一步还差一点点——要把']'前面的数字单独抠出来对吧?我给你两个实用的方案,不管是单数字(比如1)还是多数字(比如26)都能轻松搞定:

方案一:用正则表达式(最简洁灵活)

正则表达式特别适合这种有固定模式的字符串提取需求,我们可以直接匹配末尾']'前面的连续数字:

string input = "[XR] Z_Prem_4000+_Delphi_700+ [InstalmentScheme 26]";
// 正则规则:匹配一个或多个数字,且这些数字紧跟在字符串末尾的']'之前
Match match = Regex.Match(input, @"\d+(?=\]$)");
if (match.Success)
{
    string targetNumber = match.Value;
    Console.WriteLine(targetNumber); // 输出 26
}

简单解释下这个正则的逻辑:

  • \d+:匹配1个或多个数字(不管是1位还是多位都能覆盖)
  • (?=\]$):这是正向预查,用来确保我们匹配的数字后面,正好是字符串结尾的']',不会误抓其他位置的数字

方案二:纯字符串操作(不用依赖正则)

如果你不想用正则,也可以通过字符串索引定位来实现,步骤很清晰:

string input = "[XR] Z_Prem_4000+_Delphi_700+ [InstalmentScheme 1]";
// 先找到最后一个']'的位置
int closingBracketPos = input.LastIndexOf(']');
if (closingBracketPos != -1)
{
    // 从']'的前一位开始,往回找第一个非数字的位置
    int startPos = closingBracketPos - 1;
    while (startPos >= 0 && char.IsDigit(input[startPos]))
    {
        startPos--;
    }
    // 截取中间的数字部分
    string targetNumber = input.Substring(startPos + 1, closingBracketPos - startPos - 1);
    Console.WriteLine(targetNumber); // 输出 1
}

这个方法的思路是:先锁定最后一个']'的位置,然后从它前面往回遍历,直到遇到非数字字符,最后把中间的数字段截取出来,同样能适配单/多位数字的情况。

另外提一句,你原来的方法其实可以小改,但局限性比较大——比如拿到reqWord之后用reqWord.TrimEnd(']'),但如果最后一个单词里除了末尾的']'还有其他非数字字符(比如abc123]),就会把非数字部分也留下来,所以还是上面两种方法更可靠哦。

备注:内容来源于stack exchange,提问作者Pratex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:59:38