检查字符串在列表框中显示的次数

时间:2015-08-21 15:06:54

标签: c# regex listbox

我有一个列表框,我使用以下代码从按钮加载项目:

OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
    string[] lines = System.IO.File.ReadAllLines(ofd.FileName);
    foreach (string line in lines)
    {
        listBox1.Items.Add(line);
    }
}

我加载的文件包含格式为

的列表(.txt)
username:password:proxy

我的目标是仅查找代理,并计算每个代理出现的次数。

所以我使用这段代码:

List<string> proxies = new List<string>();
foreach (string s in listBox1.Items)
            {
                proxies.Add(Regex.Match(s, @"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\:\d{2,5}\b", RegexOptions.Singleline).ToString());
            }

现在我从列表中的文件中获取所有代理,但是如何以格式保存它,以便每个代理显示它出现的次数?

例如:

proxy1 - 8 (times)
proxy2 - 5 (times)
proxy3 - 4 (times)

2 个答案:

答案 0 :(得分:5)

如果您想以所提供的格式打印报告,即

  proxy1 - 8 (times)
  proxy2 - 5 (times)
  proxy3 - 4 (times)

您可以使用 Linq

String report = String.Join(Environment.NewLine,
  File.ReadLines(@"C:\MyFile.txt")
    .Select(line => line.Split(':')[2])
    .GroupBy(item => item) 
    .Select(chunk => String.Format("{0} - {1} (times)", chunk.Key, chunk.Count())));

Console.Write(report);
// Or 
// listBox1.Text = report;

答案 1 :(得分:0)

而不是

listBox1.Items.Add(line);

你想做这样的事......

ListBox1.Items.Insert(0,new ListItem("Label", "Value"))