从 .txt 文件中删除所有行,以特定单词开头的行除外

我正在尝试创建一个程序,该程序将从文本文件中读取所有行并删除所有文本,但以“第 1 行:、第 2 行:、第 3 行:”等开头的行除外。


UPDATE

谢谢你的所有建议。这是最终的工作代码:


//PROCEDURE

        private void Procedure()

        {

            // READ AND APPEND LINES

            var file_path = @"Tags.txt";

            var sb = new StringBuilder();

            foreach (var line in File.ReadLines(file_path))

            {

                if (Regex.IsMatch(line, @"^Line\s+[0-9]+:") || (Regex.IsMatch(line, @"^Zeile\s+[0-9]+:") || (Regex.IsMatch(line, @"^Linea\s+[0-9]+:"))))

                {

                    sb.AppendLine(line);

                }

            }


            // SAVE BACK

            File.WriteAllText(file_path, sb.ToString());

        }


        private void btnRefine_Click(object sender, RoutedEventArgs e)

        {

            Procedure();

        }

欢迎对代码进行任何改进。


慕少森
浏览 179回答 3
3回答

宝慕林4294392

void ProcessFile(){    var file_path = @"Tags.txt";    var sb = new StringBuilder();    foreach (var line in File.ReadLines(file_path))    {        if (!Regex.IsMatch(line, @"^Line\s+[0-9]+:"))        {            sb.AppendLine(line);        }    }    // Save back    File.WriteAllText(file_path, sb.ToString());}更新您可以改用 LINQ。那么之前的代码会是这样的:void ProcessFile(){    var file_path = @"Tags.txt";    File.WriteAllLines(file_path, File.ReadLines(file_path).Where(line => !Regex.IsMatch(line, @"^Line\s+[0-9]+:")));}

犯罪嫌疑人X

我会利用File.ReadAllLines和File.WriteAllLines来执行文件 IO。它们很方便,因为它们允许您轻松地对文件的所有行使用 LINQ 样式的操作。这是以将整个文件读入内存为代价的——这对于大小为许多 GB 的文件可能不切实际。LINQWhere子句允许您根据您选择的谓词过滤行。保持一条线的标准是它以你的Line 123:模式开始。这可以使用像 . 这样的正则表达式来表达 ^Line\s+\d+:。这基本上要求该行Line以一些空格开头,然后是一些数字,然后是一个冒号。 Regex.IsMatch将允许您测试每一行是否与正则表达式匹配。这是一个单行:File.WriteAllLines("output.txt", File.ReadAllLines("input.txt")     .Where(line => Regex.IsMatch(line, "^Line\s+\d+:")));

当年话下

将所有行作为列表获取后,您可以简单地使用 RemoveAll 删除这样的行,List<string> lines = new List<string> (File.ReadAllLines("Tags.txt"));lines.RemoveAll(line => !Regex.IsMatch(line, @"^Line\s+\d+:");using (StreamWriter fw = new StreamWriter(new FileStream("TagsNew.txt", FileMode.CreateNew, FileAccess.Write))){&nbsp; &nbsp;foreach (string line in lines)&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp;fw.WriteLine(line);&nbsp; &nbsp;}}希望这可以帮助。
打开App,查看更多内容
随时随地看视频慕课网APP