RegEx在c#中查找全班

时间:2016-04-11 13:38:15

标签: c# regex

我在使用C#中的RegEx查找全班文本时遇到了一些问题。我需要整个结构,包括“public class ...”到最后一个括号,因为它将被编译为动态代码(使用CSharpCodeProvider对象)。

以下是我班级的示例代码:

    [Worker("Structure")]
    public class DataSourceStructure
    {
        DataSet mainData = new DataSet();
        DataTable worker = new DataTable("Worker");
        DataTable year = new DataTable("Year");

        public DataSet MainSource 
        {       
           get 
           {
            worker.Columns.Add("Name");
            worker.Columns.Add("MonthSallary");
            worker.Columns.Add("DateOfBirth");
            worker.Columns.Add("WorkDescription");
            worker.Columns.Add("Sex");
            worker.Columns.Add("Worker_Id", typeof(int));

            year.Columns.Add("YearOfEmployment");
            year.Columns.Add("Worker_Id", typeof(int));

            mainData.Tables.Add(worker);
            mainData.Tables.Add(year);

            DataRelation rel = new DataRelation("Worker_Year", mainData.Tables["Worker"].Columns["Worker_Id"], mainData.Tables["Year"].Columns["Worker_Id"], true);

            mainData.Relations.Add(rel);

            return mainData;
           }
           set 
           { 
            mainData = value; 
           } 
       }
   }

我尝试了StackOverflow上描述的一些方法(例如:Using RegEx to balance match parenthesis),但它对我不起作用......或者我不知道如何正确地重建它。 ; /

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正则表达式并不总是适用于您的用例。这是因为C#语法非常复杂(context-free with some context specific rules),正则表达式只能表达/解析regular grammars

请考虑使用RoslynHere是一个教程和一段简单的代码片段,可以帮助您入门。

var code = new StreamReader("path/to/cs/file/here").ReadToEnd();
var tree = SyntaxTree.ParseCompilationUnit(code);
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();

希望这有帮助!