C# 编译替换正则表达式
我想构建一个通用正则表达式的正则表达式程序集,我必须在我的项目中使用它。我使用这些正则表达式来匹配模式并替换它。我使用这段代码构建程序集C# 编译替换正则表达式,c#,regex,C#,Regex,我想构建一个通用正则表达式的正则表达式程序集,我必须在我的项目中使用它。我使用这些正则表达式来匹配模式并替换它。我使用这段代码构建程序集 AssemblyName an = new AssemblyName("MyRegExp"); RegexCompilationInfo[] rciList = { new RegexCompilationInfo(@"\<b\>(.+?)\<\/b\>", RegexOptions.IgnoreCase, "BoldCod
AssemblyName an = new AssemblyName("MyRegExp");
RegexCompilationInfo[] rciList = {
new RegexCompilationInfo(@"\<b\>(.+?)\<\/b\>", RegexOptions.IgnoreCase, "BoldCode", "MyRegExp", true),
new RegexCompilationInfo(@"\<i\>(.+?)\<\/i\>", RegexOptions.IgnoreCase, "ItalicCode", "MyRegExp", true)
};
Regex.CompileToAssembly(rciList, an);
但是,我找不到指定替换字符串的位置。事实上,我将使用这些regexp替换html文件中的标记。因此,replace字符串也是常量
我不希望调用程序集指定replace字符串,因为它总是相同的,在不同的调用程序集之间
提前感谢您的建议,
费边
编辑1:
也许我说错了我该做什么。我有几个正则表达式,它们总是被相同的模式替换。我用字符串替换所有字符串,用字符串替换字符串,等等
已编译的正则表达式非常好,但我错过了已编译程序集中的替换模式。我设法用一个助手类构建了一个变通方法,即构建一个转换数组
我最初的问题是:这是在编译的正则表达式中指定替换字符串的一种方法吗?对于类似的事情非常有用。查看由Regex.CompileToAssembly创建的程序集
创建的类型派生自正则表达式。因此,您可以像使用内联创建的正则表达式实例一样使用它们
Re。有问题的编辑:答案似乎是:无法在生成的程序集中包含指定的字符串
AssemblyName an = new AssemblyName("MyRegExp");
RegexCompilationInfo[] rciList = {
new RegexCompilationInfo(@"\<b\>(.+?)\<\/b\>", RegexOptions.IgnoreCase, "BoldCode", "MyRegExp", true),
new RegexCompilationInfo(@"\<i\>(.+?)\<\/i\>", RegexOptions.IgnoreCase, "ItalicCode", "MyRegExp", true)
};
Regex.CompileToAssembly(rciList, an);
但是,由于使用CompileToAssembly意味着一个多步骤的构建过程—创建程序集生成器,运行它以创建程序集,然后引用该程序集—因此可以扩展该程序集以添加其他内容。创建正则表达式程序集,创建替换字符串程序集,然后使用ilmerge将它们合并为一个程序集。对于类似的事情非常有用。查看由Regex.CompileToAssembly创建的程序集
创建的类型派生自正则表达式。因此,您可以像使用内联创建的正则表达式实例一样使用它们
Re。有问题的编辑:答案似乎是:无法在生成的程序集中包含指定的字符串
AssemblyName an = new AssemblyName("MyRegExp");
RegexCompilationInfo[] rciList = {
new RegexCompilationInfo(@"\<b\>(.+?)\<\/b\>", RegexOptions.IgnoreCase, "BoldCode", "MyRegExp", true),
new RegexCompilationInfo(@"\<i\>(.+?)\<\/i\>", RegexOptions.IgnoreCase, "ItalicCode", "MyRegExp", true)
};
Regex.CompileToAssembly(rciList, an);
但是,由于使用CompileToAssembly意味着一个多步骤的构建过程—创建程序集生成器,运行它以创建程序集,然后引用该程序集—因此可以扩展该程序集以添加其他内容。创建正则表达式程序集,并创建替换字符串程序集,然后使用ilmerge将它们合并为一个程序集。CompileToAssembly方法似乎不直接支持这一点,因此您必须找到其他方法将替换字符串与正则表达式相关联。如果希望在生成的程序集中存储替换字符串,那么我可以想到的一个选项是在CompileToAssembly的自定义属性第三个参数中指定它 我认为这会为程序集生成自定义属性,而不是为单个正则表达式生成自定义属性,但例如,您可以使用类似备注的内容:您必须自己声明此属性:
[RegexReplaceString("RegexName", "Replacement")]
使用应用程序生成的DLL时,必须添加一些处理来加载替换字符串,并将其与编译的正则表达式对象一起存储在某个类中。这看起来有点困难,但至少可以让您将替换字符串存储在生成的DLL中,如果您的目标是这样的话。看起来CompileToAssembly方法并不直接支持这一点,因此您必须找到其他方法将替换字符串与正则表达式相关联。如果希望在生成的程序集中存储替换字符串,那么我可以想到的一个选项是在CompileToAssembly的自定义属性第三个参数中指定它 我认为这会为程序集生成自定义属性,而不是为单个正则表达式生成自定义属性,但例如,您可以使用类似备注的内容:您必须自己声明此属性:
[RegexReplaceString("RegexName", "Replacement")]
使用应用程序生成的DLL时,必须添加一些处理来加载替换字符串,并将其与编译的正则表达式对象一起存储在某个类中。这看起来有点困难,但至少可以让您将替换字符串存储在生成的DLL中,如果这是您的目标的话。我对我的初始问题进行了澄清。我对我的初始问题进行了澄清。好主意,我发现的与您相同,正则表达式不支持在编译时知道替换字符串。同时,我成功地编写了一个Helper类来完成所有的工作。好主意,我发现的和您一样,Regex不支持在编译时知道替换字符串。同时,我设法编写了一个助手类来完成所有的工作。