Заменить последнее вхождение слова в строку - с#
у меня есть проблема, где мне нужно заменить последнее вхождение слова в строку.
ситуация: мне дается строка, которая находится в этом формате:
string filePath ="F:/jan11/MFrame/Templates/feb11";
затем я заменяю TnaName
такой:
filePath = filePath.Replace(TnaName, ""); //feb11 is TnaName
это работает, но у меня есть проблема, когда TnaName
это то же самое, что и мой folder name
. Когда это происходит, я в конечном итоге получить строку вида:
F:/feb11/MFrame/Templates/feb11
теперь он заменил оба вхождения TnaName
С feb11
. Есть ли способ, которым я могу заменить только последнее вхождение слова в моей строке? Спасибо.
Примечание: feb11
и TnaName
который приходит из другого процесса - это не проблема.
5 ответов:
вот функция для замены последнего вхождения строки
public static string ReplaceLastOccurrence(string Source, string Find, string Replace) { int place = Source.LastIndexOf(Find); if(place == -1) return Source; string result = Source.Remove(place, Find.Length).Insert(place, Replace); return result; }
Source
- это строка, на которой вы хотите делать операцию.Find
- это строка, которую нужно заменить.Replace
- это строка, которую вы хотите заменить его.
использовать
string.LastIndexOf()
чтобы найти индекс последнего вхождения строки, а затем использовать подстроку для поиска решения.
вы должны сделать замену вручную:
int i = filePath.LastIndexOf(TnaName); if (i >= 0) filePath = filePath.Substring(0, i) + filePath.Substring(i + TnaName.Length);
Я не понимаю, почему регулярное выражение не может быть использован:
public static string RegexReplace(this string source, string pattern, string replacement) { return Regex.Replace(source,pattern, replacement); } public static string ReplaceEnd(this string source, string value, string replacement) { return RegexReplace(source, $"{value}$", replacement); } public static string RemoveEnd(this string source, string value) { return ReplaceEnd(source, value, string.Empty); }
использование:
string filePath ="F:/feb11/MFrame/Templates/feb11"; filePath = filePath.RemoveEnd("feb11"); // F:/feb11/MFrame/Templates/ filePath = filePath.ReplaceEnd("feb11","jan11"); // F:/feb11/MFrame/Templates/jan11