2010-01-05 103 views
0

我有一個字符串值,希望僅獲得工程師名稱在這種情況下,「CARL HARRISON」。拆分字符串值c#

"{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS = }" 

名稱可以是不同的長度,但總是會有相同的格式。

回答

6
string regex = @"{ Engineer = (?<Name>.*), HandHeldAvailability"; 

string input = "{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS = }"; 
string engineerName = ""; 

Match match = Regex.Match(input, regex); 
if(match.Success && match.Groups["Name"] != null) 
{ 
    engineerName = match.Groups["Name"].Value; 
} 

一個正則表達式,可以驗證輸入字符串匹配(否則match.Success會是假的),並可以輕鬆地改變的情況下,輸入格式的變化。您還可以輕鬆地匹配其他部分。

編輯:如果調用此函數很多(即在一個循環中),那麼你也可以編譯正則表達式:

public class YourDataClass { 
    private static Regex regex = new Regex(@"{ Engineer = (?<Name>.*), HandHeldAvailability", RegexOptions.Compiled); 

    public string GetNameFromInput(string input) { 
     var result = string.Empty; 
     Match match = regex.Match(input); 
     if(match.Success && match.Groups["Name"] != null) 
     { 
      result = match.Groups["Name"].Value; 
     } 
     return result; 
    } 
} 
+0

很好地完成。正則表達式對於這個東西來說非常棒。 – AboutDev 2010-01-05 00:33:26

+0

I(over?)現在甚至可以使用Regex進行最簡單的字符串匹配/操作操作 - 一旦你學會了它們,它們就變得令人上癮:-) – 2010-01-05 00:43:08

6
string name = s.Split(',')[0].Split('=')[1].Trim(); 

說明:Split,給出

{ Engineer = CARL HARRISON 
_HandHeldAvailability = H 
_HASHHT = True 
_HHTSTATUS = } 

考慮的這個第一元素給出

{ Engineer = CARL HARRISON 

Split通過=給出:

{ Engineer_ 
_CARL HARRISON 

趁着這個第二個元素賦予

_CARL HARRISON 

使Trim給出:

CARL HARRISON 

我已經更換領導和_尾隨空格,使他們明確。

+0

@Downvoter:請解釋一下。 – jason 2010-01-05 00:27:14

+0

這不是我的低調,但我認爲可以看到的問題是,如果碰巧傳入「壞」字符串(應拋出IndexOutOfRangeException),這很容易中斷。但總的來說,它很清楚,簡潔。 – 2010-01-05 00:30:20

+1

你說得對,如果驗證是問題的一部分,那麼這不是最好的方法。他問如何從我認爲的字符串中提取名稱意味着他已經知道字符串格式正確。感謝您的評論。 – jason 2010-01-05 01:17:27