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。