c# - 用于查找 C# 类和方法名称的正则表达式

标签 c# regex parsing

我正在编写一个影响分析工具,它将解析一堆选定的文件类型并找到文件中的类和方法调用(在本例中为 .cs 文件)。我已经设法编写了一个正则表达式,它会发现一行代码是否是一个方法调用。

Regex re = new Regex(
               @"\b(public|private|internal|protected)\s*" +
                "(static|virtual|abstract)?\s*[a-zA-Z]*\s[a-zA-Z]+\s*" +
                "\((([a-zA-Z\[\]\<\>]*\s*[a-zA-Z]*\s*)[,]?\s*)+\)");

然而;我不知道如何从正则表达式中获取方法名称。它将一行识别为匹配,但我如何提取实际的方法名称。对此的任何帮助将是惊人的。

此外;我不确定这是否是实际完成的方式,但是是否有任何其他(最新的)c# 文件解析器能够为我提供文件中的方法名称和类名称列表?

最佳答案

您可以将表示方法的部分放入 group像这样:

(?<method>[a-zA-Z]+)

然后你可以像这样访问它:
Match match = regex.Match(line);
if (match.Success)
{
    string method = match.Groups["method"].Value;
}

但是,您的正则表达式目前在匹配方法名称方面存在各种问题:
  • 它不处理泛型(泛型方法、参数或返回值)
  • 它不处理
  • 中带有数字或 _ 的标识符
  • 它不处理具有默认访问修饰符的方法
  • 它将匹配包含类似方法声明的字符串文字

  • 要从 C# 文件中获取方法名称,您确实需要了解 C# 的东西。请注意,Roslyn 项目很可能会让这类事情变得更容易——我们将看到第一个预览何时发布,现在很快......

    关于c# - 用于查找 C# 类和方法名称的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7593136/

    相关文章:

    php - htaccess 重写 url,如 Stack Overflow

    java - 将表达式解析为其组件和子组件

    database - 在 SQL 中以精美打印的格式选择数组

    c# - .Net 4.5 无法识别 HttpUtility

    c# - 字符串编码相关问题

    c# - ListView 中的项目没有行缩进

    c# - 为什么 unsigned int 被认为是 long?我错过了什么吗?

    javascript - 正则表达式:重复模式 n 次,最终重复有变化

    c - C语言验证密码

    android - 使用 volley 获取 json 对象和数组