现在我有这个找到方法
def getMethod(text, a, filetype):
start = a
fin = a
if filetype == "cs":
for x in range(a, 0, -1):
if text[x] == "{":
start = x
break
for x in range(a, len(text)):
if text[x] == "}":
fin = x
break
return text[start:fin + 1]
如何获得索引a
所在的方法?
我无法找到{
和}
,因为您可以使用new { }
之类的内容无效
如果我有一个带有几个方法的文件,并且我想找到x的索引所在的方法,那么我想要该方法的主体,例如,如果我有文件
private string x(){
return "x";
}
private string b(){
return "b";
}
private string z(){
return "z";
}
private string a(){
var n = new {l = "l"};
return "a";
}
我得到了“a”的索引,可以说是100
然后我想找到那个方法的主体。所以{
和}
所以这......
{
var n = new {l = "l"};
return "a";
}
但是使用我现在拥有的东西它会回来:
{l = "l"};
return "a";
}
答案 0 :(得分:1)
如果我的解释是正确的,那么您似乎正在尝试解析C#源代码以找到包含a
文件中给定位置.cs
的C#方法,其内容包含在text
。
不幸的是,如果你想做一份完整而准确的工作,我认为你需要一个完整的C# parser。
如果这听起来太多了,我会考虑使用与C#兼容的ctags版本来生成标记文件,然后在标记文件中搜索适用于给定方法的方法源文件行而不是原始源文件。
答案 1 :(得分:1)
正如Simon所说,如果您的问题是要解析源代码,那么最好的办法是为该语言提供一个合适的解析器。
如果你只是想匹配大括号,那么有一个众所周知的算法:Python parsing bracketed blocks
请注意,由于源代码是一个复杂的野兽,不要指望它能100%工作。