字符串拆分具有特殊结构

时间:2014-07-20 18:06:58

标签: c# split

我有以下形式的字符串:

str =“[int]:[int],[int]:[int],[int]:[int],[int]:[int],...”(对于未定义的次数)。

我做的是:

string[] str_split = str.Split(','); 
for( int i = 0; i < str_split.Length; i++ )
{ 
    string[] str_split2 = str_split[i].Split(':'); 
} 

不幸的是,当一些数字在数字中有额外的','时就会中断。例如,我们有这样的事情:

695,000:14306000:12,136000:12,363000:6

其中以下是数字,从左到右排序:

695000

14

306000

12

136000

12

363000

6

如何解决此字符串拆分问题?

3 个答案:

答案 0 :(得分:1)

如果只有冒号分隔符左边的数字可以包含逗号,那么你可以简单地表达为:

string s = "695,000:14,306,000:12,136000:12,363000:6";
var parts = Regex.Split(s, @":|(?<=:\d+),");

标识分隔符的正则表达式模式读取:&#34;任何冒号,或冒号后面的任何逗号和数字序列(但不是另一个逗号)&#34;。

答案 1 :(得分:1)

使用以下命令拆分一个简单的解决方案:as delimiter。结果数组将具有格式[int],[int]的数字。解析数组并使用,作为分隔符拆分每个条目。这将为您提供一个[int]数字数组。

答案 2 :(得分:0)

它可能不是最好的方法,它可能不会一直有效,但这就是我要做的。

string[] leftRightDoubles = str.Split(':'); 
foreach(string substring in leftRightDoubles){
  string[] indivNumbers = str.Split(',');
  //if indivNumbers.Length == 2, you know that these two are separate numbers
  //if indivNumbers.Length > 2, use heuristics to determine which parts belong to which number
  if(indivNumbers.Length > 2) {
    for(int i = 0, i < indivNumbers.Length, i++) {
      if(indivNumbers[i] != '000') { //Or use some other heuristic
        //It's a new number
      } else {
        //It's the rest of previous number
      }
    }
  }
}

//这是带注释的伪代码(暂时没有触及C#,所以我不想写完整的C#代码)