2015-05-28 25 views
2

我有字符串值,像下面这些:需要在第二个短划线之后得到一切?

string str1 = "123-456-test"; 
string str1 = "123 - 456 - test-test"; 
string str1 = "123-REQ456-test"; 
string str1 = "123 - REQ456 - test-test"; 

我需要第二个破折号后立即抓住从字符串中的全部内容。

我试过String.Split('-'),但没有奏效。我认为我需要使用正则表达式,但我无法找到正确的。请建议。

回答

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; 

结果:

enter image description here

如果您想要通过一切手段使用正则表达式,您可以利用一个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 
+1

我认为使用'Split'可以进一步探索,但仅仅是'String.IndexOf'应该是最有效的(参见Soner的答案)。 –

5

这甚至容易串的方法,如IndexOfSubstring

string str1 = "123-456-test"; 
int secondIndex = str1.IndexOf('-', str1.IndexOf('-') + 1); 
str1 = str1.Substring(secondIndex + 1); // test 
相关问题