我有一个字符串,可能有几个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?
答案 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循环中并尝试你的技能..