我在使用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),但它对我不起作用......或者我不知道如何正确地重建它。 ; /
提前感谢您的帮助。
答案 0 :(得分:1)
正则表达式并不总是适用于您的用例。这是因为C#语法非常复杂(context-free with some context specific rules),正则表达式只能表达/解析regular grammars。
请考虑使用Roslyn。 Here是一个教程和一段简单的代码片段,可以帮助您入门。
var code = new StreamReader("path/to/cs/file/here").ReadToEnd();
var tree = SyntaxTree.ParseCompilationUnit(code);
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
希望这有帮助!