2015-09-21 82 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