replacestring中的最后一个单词 – c#

我有一个问题,我需要replacestring中最后一个单词的出现。

情况:我给了一个这种格式的string:

string filePath ="F:/jan11/MFrame/Templates/feb11"; 

然后我TnaName这样的TnaName

 filePath = filePath.Replace(TnaName, ""); //feb11 is TnaName 

这工作,但我有一个问题,当TnaName是相同的我的folder name 。 当发生这种情况时,我最终得到一个像这样的string:

 F:/feb11/MFrame/Templates/feb11 

现在它已经用TnaName代替了两个feb11 。 有没有一种方法可以replace我的string中单词的最后一个出现? 谢谢。

注: feb11是来自另一个进程的TnaName – 这不是一个问题。

这里是取代最后一次出现的string的函数

 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是您要执行此操作的string。
  • Find是您要replace的string。
  • Replace是您要Replace的string。

使用string.LastIndexOf()查找最后一次出现的string的索引,然后使用子string查找您的解决scheme。

您必须手动进行replace:

 int i = filePath.LastIndexOf(TnaName); if (i >= 0) filePath = filePath.Substring(0, i) + filePath.Substring(i + TnaName.Length); 

我不明白为什么不能使用正则expression式:

 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 

您可以使用System.IO命名空间中的Path类:

 string filePath = "F:/jan11/MFrame/Templates/feb11"; Console.WriteLine(System.IO.Path.GetDirectoryName(filePath));