C# 删除带有特殊字符的行
我有这样一个文本文件: hello this is text file * Can you Tell me what is * Dnt Care * List item 你好 这是一个文本文件 *你能告诉我是什么吗 *Dnt护理 *列表项 我想删除所有带有星号(*)的行,因此删除后文件中的结果是: hello this is text file 你好 这是一个文本文件 LINQ使这变得简单:C# 删除带有特殊字符的行,c#,file,file-organization,C#,File,File Organization,我有这样一个文本文件: hello this is text file * Can you Tell me what is * Dnt Care * List item 你好 这是一个文本文件 *你能告诉我是什么吗 *Dnt护理 *列表项 我想删除所有带有星号(*)的行,因此删除后文件中的结果是: hello this is text file 你好 这是一个文本文件 LINQ使这变得简单: using System.IO; using System.Linq; ... File.W
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);
请注意,因为它使用而不是,所以它将一次性将整个文件读入内存
这是假设您使用的是.NET4或更高版本。如果您只使用.NET 3.5,您仍然可以使用第二种形式,但在写出结果之前,需要将结果转换为数组:
var lines = File.ReadAllLines("file.txt")
.Where(line => !line.Contains("*"))
.ToArray();
File.WriteAllLines("file.txt", lines);
读取文件中的行:
string[] lines = File.ReadAllLines(filename);
File.WriteAllLines(filename, filtered);
过滤掉带有星号的行:
string[] filtered = lines.Where(s => !s.Trim().StartsWith("*")).ToArray();
将其余行写入文件:
string[] lines = File.ReadAllLines(filename);
File.WriteAllLines(filename, filtered);
只需逐行查看字符串是否包含*
while(Reader.CanRead())
{
string currLine = reader.ReadLine();
if(currLine.Contains("*") == false)
list.Add(currLine);
}
假设您知道如何从文件中读取和写入内容,您可以使用
Regex
删除不需要的行。这样做的好处是它要求*位于行的开头,而不是仅仅出现在行的任何地方
Regex.Replace(fileContents, "(?m)(^\s*\*.*$)", "");
这个
Regex
在*前面有一个可选的空格,显然我上面的答案更好:)字符串数组的Where函数显示在哪里?@JeremyK:你需要using
指令来System.Linq
。我很高兴今天决定浏览,学到了一些新东西:)谢谢你,先生。