需要帮助从字符串中提取信息

时间:2015-09-21 22:27:51

标签: c# regex string

我目前正在使用C#中的客户端/服务器应用程序,它处理计算机规范注册并将数据包从客户端发送到服务器。

收到数据包后,我提取并将信息拆分成相关字符串,但我需要进一步提取它们。所以我有一个案例,我有一个像这样的字符串:  {2,(IDT High Definition Audio CODEC,IDT),(High Definition Audio Device,Microsoft)}

因此,音频数据封装在大括号内#34; {"和开头大括号后面的#号表示系统中有多少声音设备,每个声音设备都有一个括号对打开并用逗号分隔,括号内的每个信息也用逗号分隔。

所以我需要做的是,从上面提到的字符串中提取括号内的信息,就像有多对一样。 所以出于:

{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"};

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分: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();

当然,这只会在括号( )中查找文字。如果返回的字符串的格式可能比您显示的示例更复杂,则可能需要更详细的解析。

答案 2 :(得分: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