2010-01-01 6 views
0

donc mes urls ressemblera:filtrent slash et le numéro

/hello-world/blah/ 
/hello-world/blah 
/hello-world/blah/234 
/hello-world/234 

Si l'URL a un slash suivi de chiffres, je dois retourner la même chaîne, mais avec la barre oblique et les numéros supprimés.

donc les 2 dernières lignes devrait ressembler à:

/hello-world/blah 
/hello-world 

Comment puis-je obtenir tout, mais le slash et les numéros (si elles sont présentes)

Répondre

6

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.

+0

serait-il plus rapide de simplement effectuer le remplacement de regex, ou d'abord faire un regex.IsMatch? – mrblah

+0

@mrblah: Est-ce vraiment un botteneck dans votre code? Editer avec un peu plus sur ça ... –