2010-02-10 40 views
2

如果我有各種字符串,其中包含文本後跟空白後跟文本,我如何解析以第二個文本塊中的第一個字符開頭的子字符串?C#:通過檢測空格解析字符串中的子字符串

例如: 如果我有字符串:
「stringA stringB」

我怎樣才能提取子
「stringB」

的字符串是不同的長度,但都將是格式 。

我敢肯定,這可以很容易地用正則表達式完成,但我無法找到正確的C#語法。

回答

1

使用string.Split()

var test = "stringA stringB"; 
var elements = test.Split(new[] 
{ 
    ' ' 
}); 
var desiredItem = elements.ElementAtOrDefault(1); 

,如果你想捕獲所有空格(msdn tells us more):

var test = "stringA stringB"; 
//var elements = test.Split(); // pseudo overload 
var elements = test.Split(null); // correct overload 
var desiredItem = elements.ElementAtOrDefault(1); 

編輯:
爲什麼僞超載?

  • .Split()獲取如果所有字符串由你不要在這裏需要一個正則表達式一個空格分開編譯.Split(new char[0])
  • MSDN
+0

這隻會解析空格,而不是所有的空格(製表符,換行符)。 – Oded 2010-02-10 08:10:50

+0

解決方案基於oos示例!無論如何,做了更新! – 2010-02-10 08:12:25

+1

什麼是僞超負荷? – 2010-02-10 08:24:12

2

沒有RegEx需要,只是分裂它。

var test = "stringA stringB"; 
var second = test.Split()[1]; 

,如果你在美妙的LINQ土地

var second = "string1 string2".Split().ElementAtOrDefault(1); 

,並用正則表達式(出於完整性)

var str2 = Regex.Match("str1 str2", @"\w (.*$)").Groups[1].Value; 
+1

那裏不存在這樣的無參數方法:) – 2010-02-10 08:08:19

+0

適合我。 .NET 3.5 – 2010-02-10 08:12:14

+0

由於編譯器重載解析! – 2010-02-10 09:47:33

0

沒有記錄。您可以使用Split()方法:

string[] result = { }; 
string myStrings = "stringA stringB stringC"; 
result = myStrings.Split(' '); 
-1

您不需要事件Split()。我認爲一個簡單的IndexOf/Substring將完成這項工作。

 var input = "A B"; 
     var result = string.Empty; 
     var index = input.IndexOf(' '); 
     if (index >= 0) 
     { 
      result = input.Substring(index + 1); 
     } 
+0

- ,因爲您需要知道所需項目的長度,而這不是oo的預期行爲 – 2010-02-10 09:48:25

+0

我沒有給您發表評論。我的解決方案?即使作者說:「我怎樣才能提取子字符串?」SUBSTRING!他只想要「stringB」。爲什麼使用Split()?爲什麼要創建一個數組並僅使用最後一項?爲什麼在這個簡單的案例中使用LINQ? – 2010-02-10 12:42:38

+0

您的解決方案可能會更快,使用較先進的技術,但絕對不容易閱讀。至少不適合我。儘管如此,我還是沒有倒下。 – 2010-02-10 13:56:12