C# 用于拆分对象方法的正则表达式(obj.attr,obj.attr2)
我正在寻找一个正则表达式来拆分此类内容:C# 用于拆分对象方法的正则表达式(obj.attr,obj.attr2),c#,regex,C#,Regex,我正在寻找一个正则表达式来拆分此类内容: obj.method(obj.attr,obj.attr2) 我希望分割返回一个数组: ["obj", "method(obj.attr, obj.attr2)"] 因此,我不能在“.”上拆分,因为它还将拆分方法属性的内容 我想,只有当他们不在(“和”)之间时,我才不得不在“.”上分开 任何帮助都将不胜感激,谢谢 这是您必须使用的正则表达式 (\w+)\.(\w+\([^)]*\)) 这是您必须使用的正则表达式 (\w+)\.(\w+\([^)]*
obj.method(obj.attr,obj.attr2)
我希望分割返回一个数组:
["obj", "method(obj.attr, obj.attr2)"]
因此,我不能在“.”上拆分,因为它还将拆分方法属性的内容
我想,只有当他们不在(“和”)之间时,我才不得不在“.”上分开
任何帮助都将不胜感激,谢谢 这是您必须使用的正则表达式
(\w+)\.(\w+\([^)]*\))
这是您必须使用的正则表达式
(\w+)\.(\w+\([^)]*\))
试试这个:
string objAttr = "obj.method(obj.attr,obj.attr2)";
var res = objAttr.Split('.');
var obj = res[0];
var methodCall = String.Join(".", res.Skip(1));
输出:
obj方法(对象属性,对象属性2) 试试这个:
string objAttr = "obj.method(obj.attr,obj.attr2)";
var res = objAttr.Split('.');
var obj = res[0];
var methodCall = String.Join(".", res.Skip(1));
输出:
obj方法(对象属性,对象属性2)
如果你真的想用正则表达式解决这个问题,最好用match而不是split 为此,您可以使用来计算开括号的数量 例如,您可以获取此表达式的所有匹配字符串,以获得所需的结果:
(?x) # allow comments and ignore spaces
(?:
[^.()]+ # don't match .
|
\(
(?:
[^()]+ # in here . are allowed
| (?<open> \( ) # open++
| (?<-open> \) ) # open-- (as long as open > 0)
)*
(?(open) (?!) ) # fail if open > 0
\)
)+
(?x)#允许注释并忽略空格
(?:
不匹配。
|
\(
(?:
[^()]+#在这里。是允许的
|(?\()#打开++
|(?\)#打开--(只要打开>0)
)*
(?(打开)(?!)#如果打开>0,则失败
\)
)+
如果你真的想用regex解决这个问题,最好用match而不是split
为此,您可以使用来计算开括号的数量
例如,您可以获取此表达式的所有匹配字符串,以获得所需的结果:
(?x) # allow comments and ignore spaces
(?:
[^.()]+ # don't match .
|
\(
(?:
[^()]+ # in here . are allowed
| (?<open> \( ) # open++
| (?<-open> \) ) # open-- (as long as open > 0)
)*
(?(open) (?!) ) # fail if open > 0
\)
)+
(?x)#允许注释并忽略空格
(?:
不匹配。
|
\(
(?:
[^()]+#在这里。是允许的
|(?\()#打开++
|(?\)#打开--(只要打开>0)
)*
(?(打开)(?!)#如果打开>0,则失败
\)
)+
显示示例“禁止您使用点对点分割”。“如果我在点对点分割”。“obj.method(obj.attr,obj.attr2)”将返回[“obj”,“method(obj”,“attr,obj”,“attr2)”]显示示例“禁止您使用点对点分割”。“如果我在点对点分割”。“obj.method(obj.attr,obj.attr2)”将返回[“obj”,“method(obj”,“attr,obj”,“attr2)”]foo.bar(baz(foo.baz),que.bar)
对不起,你用了什么软件来画这个插图?我用这个网站调试正则表达式非常有用,还可以从正则表达式foo.bar(baz(foo.baz),que.bar)生成可能的匹配项
很抱歉,你用了什么软件来绘制插图?我使用的网站对调试RegEx非常有用,而且还可以从RegExManojRK解决方案生成可能的匹配项,但如果我有一个issue@abecker,只知道他的解决方案不适用于任何嵌套的括号。是的,我看到了t、 我终于使用了你的解决方案!非常感谢。你有没有关于使用Regex练习的技巧/好教程?@abecker,我建议你通读.NET Regex文档中关于每个构造的内容,并尝试一下。没有那么多。那里似乎有很好的例子。我想那里有很多教程,也有一些好书。ManojRK的解决方案似乎有效,但如果我有一个issue@abecker,只知道他的解决方案不适用于任何嵌套的括号。是的,我看到了,我终于使用了你的解决方案!非常感谢。你有任何关于使用正则表达式练习的提示/好教程吗?@abecker,我可以推荐阅读.NET正则表达式文档ab找出每一个结构,并尝试它们。不是很多。那里似乎有很好的例子。我猜那里有很多教程和一些好书。