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