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

本文关键字:字符串 抓取部 动态 位置 | 更新日期: 2023-09-27 18:27:13

我有一个字符串文件,其内容类似于

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

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

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

在这种情况下,我会获取整数2。

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

如果结构始终相同,则:

拆分字符串,并在最后一个元素之前抓取该元素。

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 a = "12,1,______,_,__;11,2,1;"
int i = Int32.Parse(String.Split(',')[5])

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

试试这个正则表达式:

(?<=;'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);
    }
}

试试这个:

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

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

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