我想构建一个我必须在我的项目中使用的常用正则表达式的正则表达式程序集。我使用这些正则表达式来匹配模式并替换它。我使用这段构建程序集的代码。
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);
但是,我找不到指定替换字符串的位置。实际上,我将使用这些正则表达式替换html文件中的标记 。因此,替换字符串也是常量。
我不希望调用程序集指定替换字符串,因为它总是相同的,不同的调用程序集。
提前感谢任何建议, 费边
EDIT1:
也许我错误地解释了我需要做的事情。我有几个正则表达式总是被相同的模式替换。我用字符串替换所有字符串,用字符串替换字符串,依此类推。
编译的正则表达式很棒,但我错过了编译程序集中的替换模式。我设法使用Helper类构建一个变通方法,构建一个Tranformation数组。
我最初的问题更多的是:它是一种在编译的正则表达式中指定替换字符串的方法吗?
答案 0 :(得分:3)
.NET Reflector对此类内容非常有帮助。看一下由Regex.CompileToAssembly
创建的类型派生自Regex。因此,您可以像使用内联创建的Regex实例一样使用完全。
重新。编辑问题:答案似乎是:无法在生成的程序集中包含指定的字符串。
但是,假设使用CompileToAssembly
意味着多步构建过程(创建程序集生成器,运行它以创建程序集,然后引用该程序集),可以对其进行扩展以添加其他内容。创建正则表达式程序集,并创建替换字符串程序集,然后使用ilmerge将它们合并为一个。
答案 1 :(得分:2)
它看起来不像“CompileToAssembly”方法直接支持,因此您必须找到一些其他方法将替换字符串与正则表达式相关联。如果要将替换字符串存储在生成的程序集中,那么我可以想到的一个选项是在自定义属性中指定它(第三个参数为“CompileToAssembly”)。
我认为这会为程序集生成自定义属性(而不是单个正则表达式),但您可以使用类似的东西(注意:您必须自己声明此属性):
[RegexReplaceString("RegexName", "Replacement")]
当您从应用程序使用生成的DLL时,您必须添加一些处理来加载替换字符串并将其与编译的Regex对象一起存储在某个类中。这看起来有点困难,但至少,它让您将替换字符串存储在生成的DLL中,如果这是您的目标。