C# 正则表达式重复模式
假设您有一个C# 正则表达式重复模式,c#,regex,split,C#,Regex,Split,假设您有一个字符串: string s = "GameObject.Find(\"obj\").GetComponent(\"comp\").GetMethod(\"method\").Get..."; 字符串可以附加任意数量的GetX()方法 您需要在不使用“.”分隔符的情况下分隔每个方法。虽然,GameObject.Find可以保留(点) 以下是我目前的代码: Match match = Regex.Match(s, "(.+?\\(\".+?\"\\))(?:\\.??)*"); 这只
字符串
:
string s = "GameObject.Find(\"obj\").GetComponent(\"comp\").GetMethod(\"method\").Get...";
字符串
可以附加任意数量的GetX()
方法
您需要在不使用“.”分隔符的情况下分隔每个方法。虽然,GameObject.Find
可以保留(点)
以下是我目前的代码:
Match match = Regex.Match(s, "(.+?\\(\".+?\"\\))(?:\\.??)*");
这只产生一个组。这个问题的正确解决方案是什么
编辑:
使用非捕获组进行了更新。首先,我建议使用逐字字符串文本在C#中编写正则表达式。这减少了需要写入的反斜杠的数量
@"(.+?\("".+?""\)\.??)*"
要获取所有捕获,请检查
联机查看它的工作情况:而不是那样,在标记为“')的位置拆分字符串。忽略最后一个子字符串,然后在每个子字符串的末尾添加“'),并删除除第一个子字符串外的每个子字符串的第一个字符中的“.”。这很好。我想知道像这样的手工计算是否比正则表达式更高效?我不知道性能限制,但我的解决方案肯定会降低程序的可读性。如果是PHP,我会使用
~(?我建议只匹配游戏对象。用Regex
查找,并将其与字符串分离。。用拆分新的字符串。
你可以得到方法的数组。
!我似乎无法让它工作,或者我的更新模式“(.+?\(\”.+?\“\)(?:\。?)*”.Match.Captures仍然显示输入字符串“GameObject.Find(\“go\”).GetComponent(\“Comp\”)的计数为1。