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

本文关键字:正则表达式 元素 未知数 获取 | 更新日期: 2023-09-27 18:17:54

我有一个字符串,它可能有几个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";

我能做些什么来获得所有的machineinfo和userinfo而不知道我可能在显示字符串中拥有的and和or的数量?

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

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

这是一个低效/不完整的解决方案,试着改善结果

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

在上面的代码中,对象aaa将给你MachineInfo ..也可以尝试类似的UserInfo,并将?操作符放在foreach循环中,试试你的技能。