如何在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
相关产品推荐
相关产品推荐

