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

如何从C#的string.Format格式串与结果串中提取指定位置数字

提取格式化字符串中占位符对应的原始数字

嘿,针对你这个需求,我整理了几个实用的解决方案,从简单到通用都有,你可以根据自己的场景选:


方案一:固定格式下的快速拆分法

因为你的格式是固定的,{1:d3}刚好位于.和/之间,直接拆分字符串就能拿到目标部分:

string formattedStr = "PC070518.001/05H";
// 第一步:按`.`拆分,取第二个部分
var middlePart = formattedStr.Split('.')[1];
// 第二步:按`/`拆分,取第一个部分(就是带前导零的数字)
var paddedNumber = middlePart.Split('/')[0];
// 转成整数,自动去掉前导零得到原始数字
int originalNumber = int.Parse(paddedNumber);
// 此时originalNumber的值就是1

这个方法简单粗暴,代码量少,但只适合固定不变的格式,如果格式字符串有修改,就得跟着改代码。


方案二:正则表达式匹配法

如果格式可能有小变动(比如日期部分的格式不变,但前后文本微调),用正则更灵活。我们可以匹配PC开头的日期、.、三位数字、/这个结构,捕获中间的三位数字:

using System.Text.RegularExpressions;

string formattedStr = "PC070518.001/05H";
// 正则规则:PC + 6位日期数字 + . + 捕获3位数字 + /
Match matchResult = Regex.Match(formattedStr, @"PC\d{6}\.(\d{3})/");

if (matchResult.Success)
{
    int originalNumber = int.Parse(matchResult.Groups[1].Value);
    // 同样得到原始数字1
}

这个方法比拆分法适应性强一点,只要日期部分始终是6位数字,就能正常捕获目标。


方案三:通用格式解析法(适配格式变化)

如果你的格式字符串可能经常调整,或者需要适配多种类似格式,那可以通过解析格式字符串本身,找到{1:d3}的前后分隔符,再去结果串中定位:

string formatStr = "PC{0:ddMMyy}.{1:d3}/{2:MM}H";
string formattedStr = "PC070518.001/05H";

// 找到目标占位符在格式串中的位置
int placeholderPos = formatStr.IndexOf("{1:d3}");
// 提取占位符前面的分隔文本(这里是`.`)
string prefix = formatStr.Substring(0, placeholderPos).Split('}').Last();
// 提取占位符后面的分隔文本(这里是`/`)
string suffix = formatStr.Substring(placeholderPos + "{1:d3}".Length).Split('{').First();

// 在结果串中定位分隔符的位置,截取中间的数字部分
int start = formattedStr.IndexOf(prefix) + prefix.Length;
int end = formattedStr.IndexOf(suffix, start);
string paddedNumber = formattedStr.Substring(start, end - start);

int originalNumber = int.Parse(paddedNumber);
// 最终得到原始数字1

这个方法的优势在于不需要硬编码格式细节,只要格式串里的占位符前后有明确的分隔文本,就能自动提取,扩展性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:17