2015-09-21 121 views
1

我目前正在C#中處理客戶端/服務器應用程序,它處理計算機規格註冊並將數據包從客戶端發送到服務器。需要幫助從字符串中提取信息

當我收到數據包後,我會提取信息並將它們拆分爲相關的字符串,但我需要進一步提取它們。所以,我有,我有這樣一個字符串的情況下: {2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)}

所以音頻數據被封裝大括號中「{」,開大括號後的#號建議多少聲音設備有內一個系統,並且對於每個聲音設備,一個支架對被打開並且這些支架對之間用逗號分開,因爲括號內的每個信息也都以逗號分隔。

所以我需要做的是,從上面提到的字符串中提取括號內的信息,它們的數量與它們的數量相同。 所以出來的:

{2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)} 

要獲取:

string[] array = new array{"IDT High Definition Audio CODEC,IDT","High Definition Audio Device,Microsoft"}; 

回答

1

試試這個代碼。我解釋評論中的代碼。

// Input string 
    string input = "{2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)}"; 

    // Remove the last } 
    input = input.Remove(input.Length - 1); 

    // Remove from the begining to the first (
    input = input.Substring(input.IndexOf('(')); 

    // Remove the first and the last characters 
    input = input.Remove(0, 1); 
    input = input.Remove(input.Length - 1); 

    // At this point, the input value is 
    // "IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft" 

    // Split it, using "),(" as separators 
    string[] data = input.Split(new[] { "),(" }, StringSplitOptions.RemoveEmptyEntries); 

    // Now, what you want is in data 
    foreach (var s in data) 
    { 
     Console.WriteLine(s); 
    } 
0

這可以通過正則表達式來完成:

string s = "{2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)}"; 
string[] array = Regex.Matches(s, @"\((?<text>.*?)\)").OfType<Match>().Select(m => m.Groups["text"].Value).ToArray(); 

當然,這僅會在括號()文本。如果返回的字符串的格式比您顯示的示例更復雜,則可能需要更詳細的解析。

0

您可以按)|(拆分以獲得所需的結果。正則表達式在這裏是一個矯枉過正的事情。

您還應該從字符串的開始處刪除{#,(,並從末尾刪除)}

//Instantiate vars 
string audioData = "{2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)}"; 
int fromChar = audioData.IndexOf("("); //get text after first "(" 
audioData = audioData.Substring(fromChar + 1, audioData.Length - fromChar - 3); // .. to the last ")" 

//Split and remove first and last item in array 
string[] stringSeparators = new string[] {"),("}; 
string[] array = audioData.Split(stringSeparators, StringSplitOptions.None); 

DEMO