Que diriez-vous:
url = Regex.Replace(url, @"/\d*$", "");
Notez le $ ici, ce qui signifie que le slash et les chiffres doivent être à la fin de la chaîne. Cela permettra d'éviter les être retirés du milieu d'une URL, comme l'a démontré dans les tests suivants:
using System;
using System.Text.RegularExpressions;
public class Test
{
static void Main()
{
TestUrl("/hello-world/blah/");
TestUrl("/hello-world/blah/234");
TestUrl("/hello-world/234");
TestUrl("/hello-world/234/blah");
TestUrl("/hello-world/12/34");
}
static void TestUrl(string url)
{
string transformed = Regex.Replace(url, @"/\d*$", "");
Console.WriteLine("{0} => {1}", url, transformed);
}
}
Résultats:
/hello-world/blah/ => /hello-world/blah
/hello-world/blah/234 => /hello-world/blah
/hello-world/234 => /hello-world
/hello-world/234/blah => /hello-world/234/blah
/hello-world/12/34 => /hello-world/12
EDIT: Je ne pense que ce soit un goulot d'étranglement dans votre code. Vous pouvez créer l'expression régulière une fois cependant, et le réutiliser:
private static readonly Regex TrailingSlashAndDigits =
new Regex(@"/\d*$", RegexOptions.Compiled);
puis utilisez
url = TrailingSlashAndDigits.Replace(url, "");
Vous pouvez essayer d'utiliser IsMatch
d'abord, mais je doute qu'il serait beaucoup chance - je d définitivement seulement aller à ce niveau de complexité supplémentaire si vous avez trouvé que c'était un goulot d'étranglement. À moins que votre code ne fasse que ça, je doute que ce soit le cas.
serait-il plus rapide de simplement effectuer le remplacement de regex, ou d'abord faire un regex.IsMatch? – mrblah
@mrblah: Est-ce vraiment un botteneck dans votre code? Editer avec un peu plus sur ça ... –