C# 通过正则表达式获取类名为的方法名
我有一个.cs文件,其中包含以下代码C# 通过正则表达式获取类名为的方法名,c#,regex,pattern-matching,C#,Regex,Pattern Matching,我有一个.cs文件,其中包含以下代码 namespace Automate { class Class1 { public string GetString { get; set; } private bool flag1; private bool flag2; public void Method(bool param1)
namespace Automate
{
class Class1
{
public string GetString
{
get;
set;
}
private bool flag1;
private bool flag2;
public void Method(bool param1)
{
bool flag = false;
}
}
class Class2
{
private bool flag1;
private bool flag2;
public void Method(bool param1)
{
bool flag = false;
}
}
}
现在我需要一个正则表达式,它返回每个方法名、属性名和全局变量及其关联的类名和命名空间
有人能告诉我任何可能的解决办法或想法吗
提前感谢不要使用正则表达式进行此类分析。您将无法构建健壮的解析器(例如,使用完全限定类型名返回结果的方法,返回泛型类型的泛型方法,等等。当然,所有这些都取决于任务的具体情况)
如果你是在.NET4.5下开发的,我会使用-它是这类工作的完美工具,而且相对容易开始。另一种方法是用它编写一个简单的聚集类结构。好的,就像@volpav编写的那样,不建议使用这种regex。。。但是我创建了一个正则表达式,它符合您的一些期望。然而,这是我刚刚匆忙完成的工作,我非常有信心,这里有很多人可以编写无法匹配的代码。我只能给你一个起点,然后你就必须从那里找到答案。(例如,这将不匹配没有任何访问修饰符的函数,您必须对其进行排序) 无论如何,这是我的建议:
\s*(静态)?\s*(公共的)\s*\w+\s*(\w+)\s*(\(\s*\w*(,?\s*\w+)*\)?
然而,我真的可以推荐你使用这个页面:帮助你使用正则表达式
祝你好运事实上,有时你需要在编译前从源代码中提取信息(因此反射已经消失),而你可能无法使用Roslyn。特别是,当您需要T4模板中的信息来生成将与源代码一起编译的代码时 为了将类名、属性名和类型提取到命名的捕获组中,我为VB.NET编写了以下内容(尚未测试):
Static regexClassName As New Regex("(?<=^[^']*\bclass\s)(?<class>\b\w*)", RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
Static regexProperty As New Regex("(?<=^[^']*\bproperty\s)(?<property>\b\w*)\s[Aa]s\s(?<type>\b\w*)", RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
Static regexportssname作为新的Regex((?@Sayse-no,我想他的意思是他从.cs文件读取,因此它是一个文本数据。而不是重写半个编译器(或至少是解析器)为什么不编译它并在结果上使用呢?我不想使用反射,我想通过正则表达式来实现。正则表达式方法的另一个缺点是:你可以判断你的类是否继承自另一个特定的类,但要判断你的类是否继承自某个特定的类并不容易。这就是为什么我想要去看Roslyn 1.0。