gpt4 book ai didi

regex - 使用 Regex 从文件中删除注释

转载 作者:行者123 更新时间:2023-12-02 22:40:26 24 4
gpt4 key购买 nike

我想编写一个程序,从文件中删除所有注释(以“//”开头直到行尾)。

我想用正则表达式来做。

我试过这个:

    let mutable text = File.ReadAllText("C:\\a.txt")
let regexComment = new Regex("//.*\\r\\n$")
text <- regexComment.Replace(text, "")
File.WriteAllText("C:\\a.txt",text)

但它不起作用......

能否请您向我解释原因,并给我一些可行的建议(最好使用正则表达式..)?

谢谢:)

最佳答案

与其将整个文件加载到内存中并在其上运行正则表达式,一种更快的方法可以处理任何大小的文件而不会出现内存问题,可能如下所示:

open System
open System.IO
open System.Text.RegularExpressions

// regex: beginning of line, followed by optional whitespace,
// followed by comment chars.
let reComment = Regex(@"^\s*//", RegexOptions.Compiled)

let stripComments infile outfile =
File.ReadLines infile
|> Seq.filter (reComment.IsMatch >> not)
|> fun lines -> File.WriteAllLines(outfile, lines)


stripComments "input.txt" "output.txt"

输出文件必须不同于输入文件,因为我们在从输入中读取的同时写入输出。我们使用正则表达式来识别注释行(带有可选的前导空格),并使用 Seq.filter 来确保注释行不会发送到输出文件。

因为我们从不将整个输入或输出文件保存在内存中,所以此函数适用于任何大小的文件,并且它可能比“读取整个文件、对所有内容进行正则表达式、写入整个文件”方法更快。

前方有危险

此代码不会删除同一行中某些代码之后出现的注释。但是,正则表达式不是该工作的正确工具,除非有人可以想出一个正则表达式来区分以下两行代码,并避免在从文件中删除与正则表达式匹配的所有内容时破坏第一行:

let request = WebRequest.Create("http://foo.com")
let request = WebRequest.Create(inputUrl) // this used to be hard-coded

关于regex - 使用 Regex 从文件中删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com