我目前正在使用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"};
答案 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);