簡體   English   中英

刪除正則表達式替換行

[英]Deleting lines with regex replace

我正在嘗試從文件中刪除以相同單詞開頭的行。 我非常確定正則表達式是正確的,我很確定它不起作用。 我想也許它不會這樣工作所以我嘗試用無空字符串替換。 但它不起作用。 有任何建議如何解決這個或如何以其他方式做同樣的事情?

string pattern = @"^smth";
 Regex rgx = new Regex(pattern);
 File.WriteAllText(path, rgx.Replace(File.ReadAllText(path), ""));

你不需要正則表達式,我認為你只需要逐行讀取文件,並檢查每行是否以smth開頭。 要啟用寫入同一位置,只需創建文件的臨時副本,然后將其刪除即可。

var tmpfile = Path.GetTempPath() + ".mytmpfile.txt";
File.Copy(path, tmpfile, true);
using (var sw = new StreamWriter(path, false, Encoding.UTF8))
{
    using (var sr = new StreamReader(tmpfile, true))
    {
         var line = string.Empty;
         while ((line = sr.ReadLine()) != null)
         {
             if (!line.Trim().StartsWith("smth"))
                sw.WriteLine(line);
         }
    }
    File.Delete(tmpfile);
}

你的正則表達式還不錯,但如果你需要將整個文件讀入變量,然后用正則表達式處理多行文本,你需要使用多行模式: string pattern = @"(?m)^smth"; (?m)將強制^匹配一行的開頭,而不是整個字符串的結尾。 或者使用RegexOptions.Multiline標志和Regex.Replace

更新:

你的方法是有效的,但正則表達式應該看起來像(?m)^\\s*smth\\b.*(?:\\r?\\n|\\z)

string pattern = @"(?m)^\s*smth\b.*(?:\r?\n|\z)";
Regex rgx = new Regex(pattern);
File.WriteAllText(path, rgx.Replace(File.ReadAllText(path), ""));

但是,如果你有大文件,我寧願選擇非正則表達式解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM