2013-02-25 58 views
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"; 
} 
+0

你能给的你试图以匹配一个例子吗?你的问题没有足够的背景。什么样的“方法”是这些了,你这是在搜索? – Celada 2013-02-25 00:47:08

+0

你去那里。我认为这更多地解释了它。 – FabianCook 2013-02-25 01:31:23

回答

1

如果我的解释是正确的,看来你正试图解析C#源代码以查找包括在.cs文件的给定位置的a C#方法,其内容被包含在text

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

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

1

西蒙说,如果你的问题是要分析的源代码,最好的办法是让该语言的合适解析器。

如果你只是看不过来匹配大括号,对于一个知名的算法:Python parsing bracketed blocks

要知道,因为源代码是一个复杂的野兽,不要指望这工作100%。

+0

+1:一个很好的解决方案,在许多情况下应该是令人满意的。 – Simon 2013-02-25 03:20:12