Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于拆分对象方法的正则表达式(obj.attr,obj.attr2)_C#_Regex - Fatal编程技术网

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找出每一个结构,并尝试它们。不是很多。那里似乎有很好的例子。我猜那里有很多教程和一些好书。