在动态位置仅抓取部分字符串

时间:2013-08-12 07:34:47

标签: c# .net

我的字符串文件包含这样的内容

string a = "12,1,______,_,__;1,23,122;"

我想只抓取这个整数值23。问题是这个问题是动态的,我的长度可以改变,所以这个字符串a很容易在下一次迭代中像

string a = "12,1,______,_,__;11,2,1;"

在这种情况下,我会抓住整数2。

5 个答案:

答案 0 :(得分:3)

如果结构总是相同的话,那么:

拆分字符串,并在最后一次抓取元素。

var array1 =  a.Split(';');

// check the array length if it's needed to avoid 
// IndexOutOfRangeException exception
var array2 =  array1[1].Split(',');

var yourNumber = array2[array2.Length - 2]

String.Split

答案 1 :(得分:2)

忽略错误检查一分钟,这可行:

string a = "12,1,______,_,__;11,2,1;"
int i = Int32.Parse(String.Split(',')[5])

如果这是您要去的路线,您应该格外小心以验证您的输入。检查从Split重新调整的数组的长度,并验证第5个值是否确实可以解析为int

答案 2 :(得分:1)

试试这个正则表达式:

(?<=;\d*,)\d*(?=,\d*;)

样本用法:

class Program
{
    static void Main(string[] args)
    {
        string a = "12,1,______,_,__;1,23,122;";
        var regex = new Regex(@"(?<=;\d*,)\d*(?=,\d*;)");
        Console.WriteLine(regex.Match(a).Value);            
        a = "12,1,______,_,__;11,2,1;";
        Console.WriteLine(regex.Match(a).Value);
    }
}

答案 3 :(得分:1)

试试这个:

var number = a.split(",")[5];

答案 4 :(得分:1)

另一种选择是将文本拆分为数组(如果它们具有相同的模式):

var output = a.Split(",;".ToCharArray());
var value = output[theIndex]; // get the index you want