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

如何在C#中从含空格的字符串提取指定格式的带空格子串

解决方案

要提取出格式为123 456 7的带空格子串,需要调整原代码逻辑——原代码直接删除所有空格的操作完全丢失了空格结构,无法满足需求。我们需要保留合理的空格(合并连续空格为单个),同时以数字数量为基准截取目标内容。

方法一:遍历统计法

先合并连续空格,再遍历字符统计数字数量,收集到7个数字后截取对应位置:

string s = "123  456  789    012  7892";

// 将连续空格合并为单个空格,避免冗余
string normalizedStr = Regex.Replace(s, @"\s+", " ");

int digitCount = 0;
int endIndex = 0;

foreach (char c in normalizedStr)
{
    if (char.IsDigit(c))
    {
        digitCount++;
        // 收集到第7个数字时,记录截取的结束位置
        if (digitCount == 7)
        {
            endIndex = normalizedStr.IndexOf(c) + 1;
            break;
        }
    }
}

string sa = normalizedStr.Substring(0, endIndex);
// 最终结果:"123 456 7"

方法二:正则匹配法

通过正则直接匹配包含前7个数字的子串,再合并连续空格:

string s = "123  456  789    012  7892";

// 匹配开头到第7个数字的所有内容(包含中间空格)
Match targetMatch = Regex.Match(s, @"^(?:\s*\d){7}");

// 将匹配结果中的连续空格替换为单个
string sa = Regex.Replace(targetMatch.Value, @"\s+", " ");
// 最终结果:"123 456 7"

原代码问题说明

原代码用Regex.Replace(s, @"\s", "")删除了所有空格,导致后续截取的是纯数字串,完全不符合带空格的格式要求。我们需要保留空格结构(合并连续空格优化格式),同时以数字数量为截取基准,才能得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:50:21