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

时间:2012-07-31 12:18:49

标签: c# regex string random replace

目前我正在编写一个库,使读写INI文件变得简单,当键和值不存在时我已经让读者工作和写作但我无法轻易更新值,我尝试了各种方法替换字符串,但没有一个是实用的,程序需要旧值

以下是我在此尝试的示例:Regular Expression to replace unknown value in text file - c# and 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)
     {
     }
}

2 个答案:

答案 0 :(得分:4)

为什么重写系统已经知道怎么做?看看这个项目:An INI file handling class using C#。您还应该知道Xml在.Net框架中占据了一席之地。使用配置框架或序列化/反序列化的简单设置对象并不罕见。我不知道你的要求,但它可以让我们描述你想要使用ini文件的原因。

那就是说,你正在写旧值(wholedata),而不是新值(结果)。这可能是根本原因。

当你调用Regex.Replace时(string.Replace这样做),它实际上会生成一个新字符串,并且不会更改参数中传递的字符串。

答案 1 :(得分:0)

将正则表达式更改为

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

这将匹配前缀和后缀存在的条件.*?(?<=)(?=)分组)