J'ai besoin d'extraire le reste de la partie de l'URL après "home"
par exemple, les URL peuvent être
/products /products/consumer /products/consumer/kids
Les mots-clés dans l'url "site "," country "pourrait changer.
Tout ce dont j'ai besoin dans la sortie est:
https://www.example.com/site/country/home/products https://www.example.com/site/country/home/products/consumer https://www.example.com/site/country/home/products/consumer/kids
J'ai essayé d'utiliser Regex, mais je n'ai pas travaillé ci-dessus situation
4 Réponses :
C'est facile d'utiliser Regex. Veuillez utiliser le Regex suivant et tester votre scénario. Cela fonctionne bien.
Regex: '(?<=\/home).*\b'
Pas besoin de s'inquiéter de la partie avant avant la maison. Dès qu'il trouve sa maison, il prendra les mots après la maison.
Comme suggéré par Corion et David dans les commentaires, dans ce cas, la méthode la plus simple consiste probablement simplement à trouver l'index de / home /
puis à tout supprimer jusqu'à ce point (mais pas en second /
):
Match match = Regex.Match(url, @"/home(/.*)"); string relativeUrl = "/"; if (match.Success) { relativeUrl = match.Groups[1].Value; }
En utilisant une expression régulière, vous voulez faire correspondre la sous-chaîne / home /
et capturer le deuxième /
et tout ce qui suit:
string home = "/home/"; int homeIndex = url.IndexOf(home); string relativeUrl = url.Substring(homeIndex + home.Length - 1);
@SitecoreSXADeveloper Je viens de le réparer.
c'est un code c # tellement simple que je pense qu'il peut vous aider
string sub = "https://www.example.com/site/country/home/products"; string temp = ""; string[] ss = sub.Split('/'); for(int i = 0; i < sub.Length; i++) { if (ss[i] == "home") { i++; for (int j = i; j < ss.Length; j++) temp +='/'+ ss[j]; break; } } Console.WriteLine(temp);
Bien que ce soit plus général que la plupart des réponses ici, il n'est pas nécessaire de diviser et de boucler; trouvez simplement l'index de home
et prenez la sous-chaîne.
Je ne donne qu'une idée et je pense que indexof n'obtient que des caractères et indexofany obtient un tableau de caractères mais peut ne pas être séquencé
Ce n'est pas vraiment une mauvaise idée, mais le code demande beaucoup plus de travail que nécessaire, et cette approche est meilleure en utilisant la réponse de Crowcoder avec System.Uri
. De plus, vous devez cocher ss.Length
au lieu de sub.Length
dans la boucle for
. string.IndexOf
trouvera l'index de départ d'une sous-chaîne dans la chaîne, donc cela fonctionne dans ce cas.
Vous pouvez utiliser la classe System.Uri
pour extraire les segments de l'URL:
Uri link = new Uri("https://www.example.com/site/country/home/products/consumer/kids"); string[] segs = link.Segments; int idxOfHome = Array.IndexOf(segs, "home/"); string restOfUrl = string.Join("", segs, idxOfHome+1, segs.Length - (idxOfHome + 1));
Yeilds:
produits / consommateurs / enfants
Le problème avec les segments est que si j'ai un espace dans l'URL, il renvoie la forme encodée. Dans mon cas pour / products / consumer / for men il retournait / products / consumer / for% 40men puis j'ai juste utilisé Trim et IndexOf.
Vous pouvez le décoder par URL, mais ce n'est pas un espace, c'est @
Trouvez le premier index de "/ home /" et prenez la sous-chaîne après cela?
Quelle regex avez-vous essayé? Aussi, pourquoi ne pas simplement utiliser String.IndexOf () ?
Quelque chose comme ça devrait fonctionner
string rest = url.Substring (url.IndexOf ("/ products") );