从字符串中替换部件

时间:2016-12-16 06:54:59

标签: c# .net

我有一个如下字符串:

string str = "Key=abc;arg=pqr;lock=100;timeout=1;"

现在我从字符串中替换此部分:

arg=pqr;

所以我的最终字符串如下:

string final ="Key=abc;lock=100;timeout=1;"

我试过如下:

string final = str.Replace("arg=pqr;", "");

但问题是当pqr更改为Lmn之类的其他内容时,它将无效。

5 个答案:

答案 0 :(得分:7)

我建议使用正则表达式来替换模式:"arg="后跟字母数字值;

  string str = "Key=abc;arg=pqr;lock=100;timeout=1;";

  string final = Regex.Replace(str, @"arg=[0-9a-zA-Z]*;", "");

一般情况下,你可以实现这样的方法:

  private static string RemoveRecord(string source, string name) {
    string pattern = @"(?<!\w)" + Regex.Escape(name) + "=[0-9a-zA-Z]*;";

    return Regex.Replace(source, pattern, "");
  }

  ...

  string final = RemoveRecord("Key=abc;arg=pqr;lock=100;timeout=1;", "arg");

答案 1 :(得分:2)

这可能会为你做到这一点

string cm = "Key=abc;arg=pqr;lock=100;timeout=1;";
string finalstr = Regex.Replace(cm, "arg=[^;]*;", "");

如果您不知道在arg=之后和;

之前会发生什么

答案 2 :(得分:2)

正如其他人所回答的那样,正则表达式对于这一点来说是很自然的。 (一个警告是分号的处理,但是因为你似乎有一个终止分号,正则表达式可以假设所有键/值对都以一个结束,因此在这个特殊情况下不会出现问题。)

这是另一种不使用正则表达式的方法,但将字符串分开并将其重新组合在一起:

string str = "Key=abc;arg=Lmn;lock=100;timeout=1;";
str = RemoveArg(str);
// str == "Key=abc;lock=100;timeout=1;"
...
private static string RemoveArg(string str)
{
    string[] originalKeyValuePairs = str.Split(';');
    List<string> newKeyValuePairs = new List<string>();
    foreach (var keyValuePair in originalKeyValuePairs)
    {
        string[] splitKeyValuePair = keyValuePair.Split('=');
        if (splitKeyValuePair[0] != "arg")
        {
            newKeyValuePairs.Add(keyValuePair);
        }
    }

    return string.Join(";", newKeyValuePairs);
}

在上文中,您可以轻松地将"arg"作为参数,以获得更大的灵活性。如果您不需要这种灵活性,您可以进一步简化循环:

foreach (var keyValuePair in originalKeyValuePairs)
{
    if (!keyValuePair.StartsWith("arg="))
    {
        newKeyValuePairs.Add(keyValuePair);
    }
}

答案 3 :(得分:1)

另一种方法是,如果您不想使用string,请splitjoin删除Regex

string str = "Key=abc;arg=pqr;lock=100;timeout=1;";

var strUpdated = string.Join("arg=Lmn;", str.Split(new[] { "arg=pqr;" }, StringSplitOptions.None));

,输出将是

Key=abc;arg=Lmn;lock=100;timeout=1;

如果您要删除字符串,只需将"arg=Lmn;"替换为""

即可

答案 4 :(得分:1)

替换字符串的另一种方法

        string _originalstr = "Key=abc;arg=pqr;lock=100;timeout=1;";

        var _newString = string.Join(";", _originalstr.Split(';').Where(x => x.Contains("arg") == false));