我正在寻找一个正则表达式来拆分这种内容:
obj.method(obj.attr,obj.attr2)
我希望拆分返回一个数组:
["obj", "method(obj.attr, obj.attr2)"]
所以,我不能在“。”上分开。因为它也会拆分方法属性的内容。
我必须在“。”上分开。我认为只有它们不在“(”和“)”之间。
任何帮助将不胜感激,谢谢!
这是您必须使用的正则表达式
(\w+)\.(\w+\([^)]*\))
如果你真的想用正则表达式解决这个问题,最好使用匹配而不是拆分。
为此,您可以使用平衡组来计算开括号的数量。
例如,您可以获取此表达式的所有匹配字符串,从而为您提供所需的结果:
(?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
\)
)+
尝试这个:
string objAttr = "obj.method(obj.attr,obj.attr2)";
var res = objAttr.Split('.');
var obj = res[0];
var methodCall = String.Join(".", res.Skip(1));
输出:
obj
方法(obj.attr,obj.attr2)