通过列表框中的某些文本分隔字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过列表框中的某些文本分隔字符串相关的知识,希望对你有一定的参考价值。

我有一个ListBox,表名是这样写的:

Staging_Section_01_2019_03_19_01  
Staging_Section_01_2019_03_20_01  
Staging_Section_23_2019_03_21_01  
Staging_Section_52_2019_03_23_01  
Staging_Section_52_2019_03_24_01  

我想要做的是将它们按节号分开,所以我希望所有Section_01在一个List对象和Section_23在另一个List对象中,依此类推。动态性质是什么让我很难。

到目前为止,我有以下内容:

foreach (var it in uploadBox.Items)
{
    if (it.ToString().Contains("Section"))
    {
        section = it.ToString().Substring(0, 18);
        found = it.ToString().IndexOf("_");
        section = section.Substring(found + 1);
        sectionNum = section.Substring(8, 2);
    }
}

我得到了sectionNum,这只是数字和部分,这是像Section_01的字符串。

有关如何处理此问题的任何想法?

预期的输出将是这样的:

List 1

Staging_Section_01_2019_03_19_01  
Staging_Section_01_2019_03_20_01  

List 2

Staging_Section_23_2019_03_21_01  

List 3

Staging_Section_52_2019_03_23_01  
Staging_Section_52_2019_03_24_01  
答案

我会用Dictionary<string, List<string>>这个。解析的每个“部分”都是一个键,剩下的部分就是值。

Dictionary<string, List<string>> myDict = new Dictionary<string, List<string>>();
foreach (var it in uploadBox.Items)
{
    if (it.ToString().Contains("Section"))
    {
        section = it.ToString().Substring(0, 18);
        found = it.ToString().IndexOf("_");
        section = section.Substring(found + 1);
        sectionNum = section.Substring(8, 2);

        if(!myDict.ContainsKey(sectionNum))
        {
            myDict.Add(sectionNum, new List<string> { someOtherValue });
        }
        else
        {
            myDict[sectionNum].Add(someOtherValue);
        }
    }
}

除非我完全误解了你的问题,否则我认为这是动态对象的潜在解决方案。

另一答案

你可以这样做:

var sections = new Dictionary<string, List<string>>();

foreach(var it in uploadBox.Items)
{
    var item = it.ToString();

    if(item.Contains("Section"))
    {

        var section = GetSection(item);

        if(!sections.ContainsKey(section))
        {
            sections.Add(section, new List<string>());            
        } 

        sections[section].Add(item);
    }    
}

private string GetSection(string item)
{
    var split = item.Split("_");
    return $"{split[1]}_{split[2]}";    
}
另一答案

这种任务最好是正则表达式:

uploadBox.Items
    .GroupBy(x => Regex.Match(x.ToString(), @"^w+_Section_(?<section>d+)").Groups["section"].Value)

以上是关于通过列表框中的某些文本分隔字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从用户输入中拆分逗号分隔的字符串

如何将文本框文本拆分为列表框 C#

导出CSV文件是以逗号为分隔符的吗?

如何将文本框中的字符串添加到另一个窗口中的列表视图

如何通过jquery在文本框中检查用户输入的小数分隔符

如何拆分对象列表以分隔pyspark数据框中的列