首页 > 解决方案 > [C#]对列表框中的项目进行排序

问题描述

我正在使用正则表达式来解析 HTML:

  private void button2_Click(object sender, EventArgs e)

    {
         string html = textBox1.Text;
        foreach (Match matcha in Regex.Matches(html, @"<(.*?)>(.*?)</(.*?)>"))
        {
            listBox1.Items.Add(matcha.Index.ToString() + matcha);
        }
        foreach (Match matchb in Regex.Matches(html, @"<input type=(.*?)>"))
        {
            listBox1.Items.Add(matchb.Index.ToString() + matchb);
        }}

button2按下时,listbox1具有以下项目:

  1. 25...

  2. 29 ...

  3. 27.. ​​.

我想要预期的输出

  1. 25 ...

  2. 27..​​.

  3. 29...

我应该怎么办?

标签: c#

解决方案


将您的项目添加到列表中,对其进行排序,然后制作 ListBox 的排序列表源:

private void button2_Click(object sender, EventArgs e)
{
    string html = textBox1.Text;
    List<String> tmp = new List<String>();//Add this
    foreach (Match matcha in Regex.Matches(html, @"<(.*?)>(.*?)</(.*?)>"))
    {
        tmp.Add(matcha.Index.ToString() + matcha);//Change this line
    }
    foreach (Match matchb in Regex.Matches(html, @"<input type=(.*?)>"))
    {
        tmp.Add(matchb.Index.ToString() + matchb);//Change this one too
    }

    var sorted = list.OrderBy(x => PadNumbers(x));//Add this line 
    listBox1.Datasource = sorted;//and this
}

PadNumbers被定义为:

public static string PadNumbers(string input)
{
    return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));
}

这应该像“自然排序”那样对所有数字进行排序。因此,如果您的数字是8, 90, 10,此脚本会将其排序为8, 10, 90,而正常排序将返回10, 8, 90
都清楚了吗?


推荐阅读