C# 拆分字符串-C-复杂

C# 拆分字符串-C-复杂,c#,regex,string,split,C#,Regex,String,Split,我有下面的字符串,我想拆分它: "INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3)"; 我想要得到的值是单独的@test@test1@test2@test3,因此我可以对每个值做不同的处理 这就是我目前所拥有的 string str = "INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @t

我有下面的字符串,我想拆分它:

"INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3)";
我想要得到的值是单独的@test@test1@test2@test3,因此我可以对每个值做不同的处理

这就是我目前所拥有的

string str = "INSERT INTO test (test, test1, test2, test3) values (@test, @test1, @test2, @test3)"
var pattern = @"(?<=@)[^@]*(?=>,)";
foreach (var m in System.Text.RegularExpressions.Regex.Split(str, pattern))
     {
        Console.WriteLine(m);
     }

我希望你们中的一些人能帮助我,因为这是我的程序工作的最后一根针

你试过字符串模式=@[a-zA-Z0-9]+

你试过字符串模式=@[a-zA-Z0-9]+

我不喜欢正则表达式,但很多人都喜欢,所以我会给你一个很好的老字符串方法的答案:

var parameters = str.Split('@').Skip(1).Select(var=>"@" + var.Trim(new[] {',',')', ' '}));

我不喜欢正则表达式,但很多人喜欢正则表达式,所以我将作为一个很好的旧字符串方法给出我的答案:

var parameters = str.Split('@').Skip(1).Select(var=>"@" + var.Trim(new[] {',',')', ' '}));


问题是:如何确定这些值的起点和终点的边界?如果您计划使用正则表达式,它应该知道从何处开始匹配,从何处结束匹配。我可以在@和@处拆分它,稍后再在@处拆分它,但我仍然可以这样做。好的,请尝试regex.Matchesstr、@\w+.Cast.Selectp=>p.Value.ToList。虽然在这一点上,凯尔的答案应该是一样的。嗯,除了正则表达式只匹配@之后的字符外。为什么不使用String.Format。。。。或者更好的SQLParameters?是的,我使用了kells answer@WiktorStribiżew,它工作得非常好。你知道我可以在哪里学习这样的正则表达式吗?问题是:你如何确定这些值的起点和终点的边界?如果您计划使用正则表达式,它应该知道从何处开始匹配,从何处结束匹配。我可以在@和@处拆分它,稍后再在@处拆分它,但我仍然可以这样做。好的,请尝试regex.Matchesstr、@\w+.Cast.Selectp=>p.Value.ToList。虽然在这一点上,凯尔的答案应该是一样的。嗯,除了正则表达式只匹配@之后的字符外。为什么不使用String.Format。。。。或者更好的SQLParameters?是的,我使用了kells answer@WiktorStribiżew,它工作得非常好,你知道我可以在哪里学习这样的正则表达式吗?在第一行中,它返回INSERT到测试中,测试1,测试2,测试3值第二,第三,第四,5抱歉,它将所有内容放在同一行上。您需要像读取返回的行数一样读取它。这似乎起作用了。检查@krw12572:是的,但不使用正则表达式。拆分请参见。@WiktorStribiżew虽然网站没有高亮显示@test,但我在浏览表选项卡时发现它得到了@test。太懒了,无法在CIn上测试它返回的第一行INSERT-INTO-test,test1,test2,test3值second,third,4th,5th抱歉,它将所有内容放在同一行上,您需要读取它,就像它返回的行数一样。这看起来很有效。检查@krw12572:是的,但不使用正则表达式。拆分请参见。@WiktorStribiżew虽然网站没有高亮显示@test,但我在浏览表选项卡时发现它得到了@test。懒得在CAnd my变体上测试:str.Split“”,''。Wheres=>s.StartsWith@Split接受一个params数组,所以您不必费心创建一个arrayworks完美,我甚至理解为什么感谢您!还有我的变体:str.Split“”,''。Wheres=>s.StartsWith@Split接受一个params数组,因此您不必费心创建一个arrayworks,我甚至理解为什么要感谢您!