Как удалить определенную подстроку в C#

поэтому у меня есть несколько расширений файлов в моих проектах c# и мне нужно, чтобы удалить их из файла, если они есть.

пока я знаю, что могу проверить, есть ли подстрока в имени файла.

if (stringValue.Contains(anotherStringValue))
{  
    // Do Something // 
}

так что если сказать stringValue is test.asm, а затем он содержит .asm, Я хочу как-то убрать .asm С stringValue.

как я могу это сделать?

4 ответов


Если вы хотите" черный список " подход в сочетании с Path библиотека:

// list of extensions you want removed
String[] badExtensions = new[]{ ".asm" };

// original filename
String filename = "test.asm";

// test if the filename has a bad extension
if (badExtensions.Contains(Path.GetExtension(filename).ToLower())){
    // it does, so remove it
    filename = Path.GetFileNameWithoutExtension(filename);
}

примеры обработки:

test.asm        = test
image.jpg       = image.jpg
foo.asm.cs      = foo.asm.cs    <-- Note: .Contains() & .Replace() would fail

можно использовать путь.GetFileNameWithoutExtension (filepath) сделать это.

if (Path.GetExtension(stringValue) == anotherStringValue)
{  
    stringValue = Path.GetFileNameWithoutExtension(stringValue);
}

нет необходимости в if (), просто используйте :

stringValue = stringValue.Replace(anotherStringValue,"");

Если anotherStringValue не найден в stringValue, то ничего не изменится.


еще один однострочный подход к избавлению только от ".asm " в конце, а не какой-либо "asm" в середине строки:

stringValue = System.Text.RegularExpressions.Regex.Replace(stringValue,".asm$","");

" $ " соответствует концу строки.

матч ".АСМ" или ".ASM " или любой equivlanet, вы можете дополнительно указать Regex.Заменить, чтобы игнорировать случай:

using System.Text.RegularExpresions;
...
stringValue = Regex.Replace(stringValue,".asm$","",RegexOptions.IgnoreCase);