C#实现移除ListBox项前编号与空格并重新编号
解决ListBox移除旧编号并重新编号的问题
原代码的问题
你原来的代码用固定的Substring(4)截取字符,没法适配不同长度的编号和空格组合:
- 1-9的编号加3-4个空格,总长度是4或5,截取4位会留下多余空格;
- 10-99的编号加2-3个空格,总长度是4或5,截取4位可能会误删内容开头的字符。
另外,循环中直接修改ListBox的Items集合,容易导致索引混乱,出现处理遗漏或重复的问题。
正确的实现方法
用正则表达式匹配开头的数字和任意数量的空格,先提取出纯内容,再重新添加带规范编号的项:
private void button43_Click(object sender, EventArgs e) { // 收集所有处理后的纯内容 List<string> cleanedContents = new List<string>(); foreach (var item in listBox1.Items) { string originalText = item.ToString(); // 匹配开头的数字+任意数量空格,替换为空,保留后面的内容 string pureContent = System.Text.RegularExpressions.Regex.Replace(originalText, @"^\d+\s+", ""); cleanedContents.Add(pureContent); } // 清空原有项,重新添加带新编号的内容 listBox1.Items.Clear(); for (int i = 0; i < cleanedContents.Count; i++) { // 按"编号 + 空格 + 内容"的格式添加 listBox1.Items.Add($"{i + 1} {cleanedContents[i]}"); } }
代码说明
- 正则匹配:
@"^\d+\s+"的意思是匹配字符串开头的一个或多个数字,后面跟着一个或多个空格,把这部分直接替换为空,就能得到去掉旧编号和空格的纯内容。 - 重新编号:先把所有纯内容收集到列表里,清空ListBox后,再按顺序给每个内容加上从1开始的连续编号,格式统一规范。
内容的提问来源于stack exchange,提问作者Wadim
相关产品推荐
相关产品推荐

