获取未知数量的正则表达式元素
本文关键字:正则表达式 元素 未知数 获取 | 更新日期: 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循环中,试试你的技能。