Заменить последнее вхождение слова в строку - с#
у меня есть проблема, где мне нужно заменить последнее вхождение слова в строку.
ситуация: мне дается строка, которая находится в этом формате:
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