删除带有特殊字符的行

本文关键字:特殊字符 删除 | 更新日期: 2023-09-27 18:04:51

我有一个像这样的文本文件:

<>之前你好这是文本文件你能告诉我什么是*不关心*列表项目之前

我想删除所有行有星号(*),所以在文件删除后的结果是:

<>之前你好这是文本文件

删除带有特殊字符的行

LINQ使这很容易:

using System.IO;
using System.Linq;
...
File.WriteAllLines("output.txt",
                   File.ReadLines("input.txt")
                       .Where(line => !line.Contains("*")));

或者作为两个语句-它仍然是懒惰的,一次只读取一行:

var query = File.ReadLines("input.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("output.txt", query);

如果您确实需要替换原始文件,您可以使用上面的,然后删除原始文件并移动新文件,(如果文件足够小)读取整个文件开始:

var lines = File.ReadAllLines("file.txt").Where(line => !line.Contains("*"));
File.WriteAllLines("file.txt", lines);

注意,因为这里使用的是ReadAllLines而不是ReadLines,所以它会一次将整个文件读入内存。

假设您使用的是。net 4或更高版本。如果你只使用。net 3.5,你仍然可以使用第二种形式,但是你需要在输出之前将结果转换成一个数组:

var lines = File.ReadAllLines("file.txt")
                .Where(line => !line.Contains("*"))
                .ToArray();
File.WriteAllLines("file.txt", lines);

假设您知道如何从文件中读取和写入内容,您可以使用Regex来删除您不想要的行。这样做的好处是,它要求*出现在行首,而不是仅仅出现在行上的任何地方。

Regex.Replace(fileContents, "(?m)(^'s*'*.*$)", "");

Regex在*.

前面有可选数量的空格。

读取文件中的行:

string[] lines = File.ReadAllLines(filename);

过滤带有星号的行:

string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();

将剩下的行写入文件:

File.WriteAllLines(filename, filtered);

逐行查看字符串是否包含*

while(Reader.CanRead())
{
   string currLine = reader.ReadLine();
   if(currLine.Contains("*") == false)
       list.Add(currLine);
}