2
votes

Extraire une partie de l'URL après "Accueil"

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


3 commentaires

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


4 Réponses :


0
votes

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.


0 commentaires

2
votes

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


1 commentaires

@SitecoreSXADeveloper Je viens de le réparer.



1
votes

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


3 commentaires

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.



0
votes

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


2 commentaires

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 @