100 votes

Remplacer la dernière occurrence d'un mot dans une chaîne de caractères - C#

J'ai un problème où je dois remplacer la dernière occurrence d'un mot dans une chaîne de caractères.

Situation : On me donne une chaîne de caractères qui a ce format :

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

Je remplace alors TnaName comme ça :

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

Cela fonctionne, mais j'ai un problème lorsque TnaName est le même que mon folder name . Lorsque cela se produit, je finis par obtenir une chaîne de caractères comme celle-ci :

F:/feb11/MFrame/Templates/feb11

Il a maintenant remplacé les deux occurrences de TnaName con feb11 . Existe-t-il un moyen de remplacer uniquement la dernière occurrence du mot dans ma chaîne ?

Note : feb11 es TnaName qui provient d'un autre processus - ce n'est pas un problème.

0voto

Yuriy Rozhovetskiy Points 14033

Vous pouvez utiliser un Path classe de System.IO espace nom :

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

Console.WriteLine(System.IO.Path.GetDirectoryName(filePath));

0voto

Kai Hartmann Points 779

Ce qui suit ne remplace pas TnaName dans le chemin/chaîne, mais le renvoie plutôt sans TnaName inclus :

var lastIndex = filePath.LastIndexOf(TnaName); // get position of TnaName

filePath = filePath.Substring(0, lastIndex); // get path till position of TnaName

0voto

Mimina Points 1126

La fonction suivante divise une chaîne de caractères à la dernière occurrence du motif (mot à remplacer).
Ensuite, il change le motif avec la chaîne de remplacement (dans la deuxième moitié de la chaîne).
Enfin, il concatène à nouveau les deux moitiés de chaîne l'une avec l'autre.

using System.Text.RegularExpressions;

public string ReplaceLastOccurance(string source, string pattern, string replacement)
{
   int splitStartIndex = source.LastIndexOf(pattern, StringComparison.OrdinalIgnoreCase);
   string firstHalf = source.Substring(0, splitStartIndex);
   string secondHalf = source.Substring(splitStartIndex, source.Length - splitStartIndex);
   secondHalf = Regex.Replace(secondHalf, pattern, replacement, RegexOptions.IgnoreCase);

   return firstHalf + secondHalf;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X