我找到了很多关于如何使用正则表达式替换文件中文本的例子。然而,这可以归结为两个版本:
1. 迭代文件中的所有行,并将正则表达式应用于每一行
2. 加载整个文件。
对于“我的”文件来说,第二种方法不可行——它们大约有2GiB…
至于第一种方法:目前这是我的方法,但我想知道…如果需要应用跨越多行的正则表达式怎么办?
我找到了很多关于如何使用正则表达式替换文件中文本的例子。然而,这可以归结为两个版本:
1. 迭代文件中的所有行,并将正则表达式应用于每一行
2. 加载整个文件。
对于“我的”文件来说,第二种方法不可行——它们大约有2GiB…
至于第一种方法:目前这是我的方法,但我想知道…如果需要应用跨越多行的正则表达式怎么办?
答案如下:
没有简单的方法
我发现一个StreamRegex-Class可能能够做到我想要的。
从我所理解的算法来看:
这样就不需要加载整个文件 -- 或者至少减少了在内存中加载整个文件的机会...
但是:最坏的情况是整个文件中都没有匹配项 - 在这种情况下,整个文件将被加载到内存中。
如果您不介意手脏一点(并且您的正则表达式足够简单,或者您非常渴望速度并且不介意受点苦),您可以使用Ragel。它可以针对C#进行优化,尽管该网站没有提到。但是,您需要包装一个FileStream以提供缓冲索引器,或者在64位进程中使用内存映射文件(带有不安全指针)才能处理大文件。