2015-05-28 32 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 
相關問題