2016-12-16 3 views
-1

У меня есть строка, как показано ниже:Замена части из строки

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, тогда это не сработает.

+1

Как определить, является ли 'pqr' или' lmn' или что-то другое ?что бы это ни было, получить его в переменной и выполнить замену –

+0

Почему бы вам не попробовать: проанализируйте данные (формат кажется довольно простым), ищите тот, который начинается с 'arg = ???' и помещает его снова вместе. –

+3

Downvoters, что заставило вас проголосовать за downvoting.What неправильно вы нашли в этом вопросе.Пожалуйста, обратите внимание, чтобы я мог знать в следующий раз, задавая вопрос. Иногда трудно задать вопрос о SO, потому что я не знаю, какой вопрос будет приветствоваться, а что не будет –

ответ

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"); 
+0

Предположим, что если у меня есть arg: arg = 1pqr или arg = pqr1, то? –

+2

@Learning: затем немного измените шаблон: '@" arg = [0-9a-zA-Z] *; "' –

+0

В чем разница? –

2

Это может сделать трюк для вас

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

если вы не знаете, что будет после того, как arg= и до ;

+0

Может быть, включает '=', в случае, если есть аргумент 'arg2' –

+0

Hey @ManfredRadlwimmer, это хорошее предложение. Лемм обновить ответ. :) –

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)); 

и выход будет be

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

и если вы хотите удалить строку, то просто замените "arg=Lmn;" на ""

+0

OP хочет заменить '" arg = ??? "' - это может быть '' arg = pqr "', но также может быть '' arg = Lmn''. –

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); 
    } 
} 
+0

Огромное спасибо за ответ, и я получаю ответ от разработчика Microsoft. :) –

1

Другой способ строки замены

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

     var _newString = string.Join(";", _originalstr.Split(';').Where(x => x.Contains("arg") == false)); 
Смежные вопросы