我是正则表达式的新手。我需要编写一个正则表达式代码,它使用它的说明符,类型(抽象,静态)及其基类来查找所有类。
如果我的Customer.cs文件有以下代码
,请说明 internal class Customer
{
//stuff
}
public class XYZ : Customer
,IServiceProvider
{
private class Order
{
//stuff
}
}
public abstract class ABC
{
//stuff
}
public static class ABC1
{
//stuff
}
如何通过Regexp
获取以下格式的所有类名internal class Customer
public class XYZ : Customer
,IServiceProvider
private class Order
public abstract class ABC
public static class ABC1
我不能为此目的使用反射。
提前致谢
答案 0 :(得分:1)
你的正则表达式需要处理:
有可能写出这样的正则表达式,但如果可以的话,这将是非常复杂和不可靠的。您试图在非常规语法中查找内容,因此正则表达式不是解决方案。你需要一个合适的语法分析器。
答案 1 :(得分:1)
如果您知道要解析的代码有效,则可以使用:
const string Code = @"internal class Customer..."; //code to parse goes here
const string pattern = @"(((internal)|(public)|(private)|(protected)|(sealed)|(abstract)|(static))?[\s\r\n\t]+){0,2}class[\s\S]+?(?={)";
var matches = System.Text.RegularExpressions.Regex.Matches(Code, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);
var classes = matches.Cast<Match>().Select(x => x.Value.Trim());
您可能希望对结果进行一些清理 - 即删除新行
答案 2 :(得分:1)
考虑以下Regex ......
.*?\sclass\s[\S\s]*?(?={)
答案 3 :(得分:0)
假设代码是正确的(即它编译没有问题)你不需要正则表达式,拆分就可以完成工作:
var code = "<Your code goes in here"; // SEE BELOW
var classDeclarations = code
.Replace(Environment.NewLine, "")
.Split('{', '}')
.Where(c => c.Contains("class");
代码的作用:
要使代码正常运行,您应该:
"
替换为\"