0

现在我有这个找到方法

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

2 回答 2

1

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

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

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

于 2013-02-25T01:47:01.417 回答
1

正如西蒙所说,如果您的问题是解析源代码,最好的办法是为该语言获取合适的解析器。

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

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

于 2013-02-25T02:46:41.207 回答