簡體   English   中英

如何替換文件中的未知字符串?

[英]How can I replace a unknown string in a file?

目前,我正在編寫一個庫來簡化讀取和寫入INI文件的過程,當鍵和值不存在時讓閱讀器可以工作和編寫,但是我無法輕松地更新值,我嘗試了各種方法來替換字符串但是都不可行,程序需要舊值

這是我在這里嘗試過的一個示例: 正則表達式替換文本文件中的未知值-c#和asp.net

Regex rgx = new Regex(@"SQL-SERVER-VERSION="".*?""");
string result = rgx.Replace(input, replacement);

但是,每次我修改該代碼以替換值時,它最終都會替換鍵,從而在應用程序下次嘗試讀取文件時導致錯誤。

這是我當前正在使用的代碼:

private string wholedata;
private void UpdateKey(string key, string path, string newval)
{
    try
    {
        using (StreamReader s = new StreamReader(File.Open(path, FileMode.Open)))
        {
            wholedata = s.ReadToEnd();
            Regex rgx = new Regex(key + ".*?");
            string result = rgx.Replace(wholedata, newval);
            MessageBox.Show(result);
        }
        using (StreamWriter s = new StreamWriter(File.Open(path, FileMode.OpenOrCreate)))
        {
            s.Write(wholedata);
        }
     }
     catch (Exception e)
     {
     }
}

為什么要重寫系統已經知道的操作方法? 看一下這個項目: 使用C#的INI文件處理類 您還應該知道Xml在.Net框架中占據了重要位置。 使用配置框架或序列化/反序列化的簡單設置對象並不少見。 我不知道您的要求,但這可以啟發我們描述您為什么要使用ini文件。

也就是說,您正在寫入舊值(整個數據),而不是新值(結果)。 這可能是根本原因。

調用Regex.Replacestring.Replace也是string.Replace ),它實際上會生成一個新字符串,並且不會更改傳入參數的字符串。

將正則表達式更改為

Regex rgx = new Regex(@"(?<=SQL-SERVER-VERSION="").*?(?="")");

這將匹配.*? 前提是存在前綴和后綴( (?<=)(?=)分組)

暫無
暫無

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

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