获取未知数量的正则表达式元素

时间:2011-12-14 12:52:45

标签: c# regex c#-4.0

我有一个字符串,可能有几个AND和OR的组合,如下所示:

   string display = "every ((Id2=Event(MachineInfo='M3',UserInfo='U3')) or (Id1=Event(MachineInfo='M2',UserInfo='U2')) and (Id0=Event(MachineInfo='M1',UserInfo='U1')))"

现在我有一种低效的方法来捕获第一个MachineInfo和UserInfo,但我不知道如何获取字符串的其余元素:

 const string machineinfo = @"MachineInfo='(?<MachineInfo>[^']+)";
 const string userinfo = @"UserInfo='(?<UserInfo>[^']+)";

 string machineName = display.Contains("MachineInfo") ?
             Regex.Matches(display, machineinfo)[0].Groups[1].Value : "ANY";
 string userName = display.Contains("UserInfo") ?
             Regex.Matches(display, userinfo)[0].Groups[1].Value : "ANY";

如果不知道显示字符串中可能包含的AND和OR的数量,我该如何获取所有MachineInfos和UserInfos?

2 个答案:

答案 0 :(得分:1)

看起来您的语法包括使用括号嵌套。我建议你不要使用正则表达式来解析它,而是考虑使用正确的解析器。正则表达式无法真正表达这种嵌套性。

答案 1 :(得分:-1)

这是一个效率低下/不完整的解决方案,请尝试自己改进结果

        MatchCollection aa = Regex.Matches(display, machineinfo);
        foreach (var aaa in aa) {
            //aaa.ToString() 
            //try some thing with object aaa
        }

在上面的代码中,对象aaa会给你MachineInfo ..尝试与UserInfo类似,并将?运算符放在foreach循环中并尝试你的技能..