在文件中查找方法字符串

时间:2013-02-25 00:19:22

标签: python

现在我有这个找到方法

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";
}

2 个答案:

答案 0 :(得分:1)

如果我的解释是正确的,那么您似乎正在尝试解析C#源代码以找到包含a文件中给定位置.cs的C#方法,其内容包含在text

不幸的是,如果你想做一份完整而准确的工作,我认为你需要一个完整的C# parser

如果这听起来太多了,我会考虑使用与C#兼容的ctags版本来生成标记文件,然后在标记文件中搜索适用于给定方法的方法源文件行而不是原始源文件。

答案 1 :(得分:1)

正如Simon所说,如果您的问题是要解析源代码,那么最好的办法是为该语言提供一个合适的解析器。

如果你只是想匹配大括号,那么有一个众所周知的算法:Python parsing bracketed blocks

请注意,由于源代码是一个复杂的野兽,不要指望它能100%工作。