我有以下字符串值:
string str1 = "123-456-test";
string str1 = "123 - 456 - test-test";
string str1 = "123-REQ456-test";
string str1 = "123 - REQ456 - test-test";
我需要在第二个破折号后立即从字符串中获取整个内容。
我尝试了String.Split('-')
,但它没有用。我想我需要使用正则表达式,但我找不到正确的正则表达式。请建议。
答案 0 :(得分:5)
使用IndexOf
和Substring
之类的字符串方法,这很容易。
string str1 = "123-456-test";
int secondIndex = str1.IndexOf('-', str1.IndexOf('-') + 1);
str1 = str1.Substring(secondIndex + 1); // test
答案 1 :(得分:3)
答案 2 :(得分:1)
您可以将LINQ Skip(2)
与Split
一起使用,无需在C#中使用正则表达式执行此任务:
string input = "123-456-test";
string res = input.Contains("-") && input.Split('-').GetLength(0) > 2 ? string.Join("-", input.Split('-').Skip(2).ToList()) : input;
结果:
如果您想一直使用正则表达式,可以使用variable-width look-behind in C#:
(?<=(?:-[^-]*){2}).+$
请参阅regex demo
示例代码:
var rgx = new Regex(@"(?<=(?:-[^-]*){2}).+$");
Console.WriteLine(rgx.Match("123-456-test").Value);
Console.WriteLine(rgx.Match("123 - 456 - test-test").Value);
Console.WriteLine(rgx.Match("123-REQ456-test").Value);
Console.WriteLine(rgx.Match("123 - REQ456 - test-test").Value);
输出:
test
test-test
test
test-test