3 回答

TA貢獻2021條經驗 獲得超8個贊
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]+:")));
}

TA貢獻2080條經驗 獲得超4個贊
我會利用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+:")));

TA貢獻1890條經驗 獲得超9個贊
將所有行作為列表獲取后,您可以簡單地使用 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)))
{
foreach (string line in lines)
{
fw.WriteLine(line);
}
}
希望這可以幫助。
- 3 回答
- 0 關注
- 252 瀏覽
添加回答
舉報