Skip to main content
 首页 » 编程设计

c#之编译替换正则表达式

2024年02月03日30freeliver54

我想构建一个我必须在我的项目中使用的常用正则表达式的正则表达式程序集。我使用这些正则表达式来匹配模式并替换它。我使用这段构建程序集的代码。

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 文件中的标签 替换为 .因此,替换字符串也是常量。

我不希望调用程序集指定替换字符串,因为它在不同的调用程序集中始终相同。

提前感谢您的任何建议, 费边

编辑1:

也许我误解了我需要做什么。我有几个总是用相同模式替换的正则表达式。我将所有 string 替换为字符串,将 string 替换为字符串,等等。

编译后的正则表达式很棒,但我错过了编译后程序集中的替换模式。我设法使用 Helper 类构建了一个变通方法,即构建了一个转换数组。

我最初的问题更多的是:是否有一种方法可以在已编译的正则表达式中指定替换字符串?

请您参考如下方法:

.NET Reflector对这样的事情很有帮助。查看由 Regex.CompileToAssembly

创建的程序集

创建的类型源自正则表达式。因此,您可以完全像使用内联创建的 Regex 实例一样使用它们。


回复。编辑有问题:答案似乎是:无法在生成的程序集中包含指定的字符串。

但是,鉴于使用 CompileToAssembly 意味着多步构建过程(创建程序集生成器,运行它以创建程序集,然后引用该程序集),可以扩展它以添加其他内容。创建正则表达式程序集,并创建替换字符串程序集,然后使用 ilmerge 将它们合并为一个。