我有一个如下字符串:
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
之类的其他内容时,它将无效。
答案 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
,请split
和join
删除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));