C# 获取未知数量的正则表达式元素
我有一个字符串,它可能有几个and和OR的组合,如下所示:C# 获取未知数量的正则表达式元素,c#,regex,c#-4.0,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,但我不知道如何获取
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=@“machineinfo=”(?[^']+);
常量字符串userinfo=@“userinfo=”(?[^']+);
字符串machineName=display.Contains(“MachineInfo”)?
Regex.Matches(display,machineinfo)[0]。组[1]。值:“ANY”;
字符串userName=display.Contains(“UserInfo”)?
Regex.Matches(display,userinfo)[0]。组[1]。值:“ANY”;
在不知道显示字符串中可能包含的and和OR的数量的情况下,如何获取所有机器信息和用户信息???您的语法似乎包括用括号嵌套。我建议您不要使用正则表达式来解析它,而是研究如何使用合适的解析器。正则表达式无法真正表达这种嵌套性。这是一个效率低下/不完整的解决方案,请尝试改进结果
MatchCollection aa = Regex.Matches(display, machineinfo);
foreach (var aaa in aa) {
//aaa.ToString()
//try some thing with object aaa
}
在上面的代码中,object
aaa
将为您提供MachineInfo
。也可以尝试与UserInfo
类似的功能,并将?
操作符放在foreach循环中,试试您的技能。您知道哪一个吗?我猜是ANTLR,但我不太了解它,无法推荐它。请稍等片刻,看看还会出现什么。parboiled似乎适用于Java,我在使用C#我不太喜欢使用外部工具的选项,我更喜欢用编程的方式来实现它。@Manolete:你为什么这么认为?