J'essaie de manipuler une chaîne et je souhaite supprimer certains caractères.

Exemple de scénario:

abc-def-c?p=2&x=5&z=6

Je veux remplacer tous les caractères commençant par p et se terminant par le caractère suivant & ou ? par des caractères vides. Les supprimer en quelque sorte.

Entrée: abc-def-c?p=2&x=5&z=6

Sortie: abc-def-c?x=5&z=6

Je sais que je peux y parvenir avec Substring, IndexOf et Replace mais malheureusement il y a un problème que les parties p, x, y peuvent ne pas être dans cet ordre tout le temps. J'ai besoin de quelque chose qui trouverait juste la pièce et la remplacerait.

Mes compétences en regex ne sont pas très bonnes, donc toute aide est appréciée.

1
Ege Bayrak 26 avril 2017 à 17:48

3 réponses

Meilleure réponse

Essayez cette expression régulière:

(?<=[?&])p=.*?(?:&|$)

Il correspond à p= précédé de ? ou & ((?<=[?&])) et suivi d'une valeur de chaîne qui se termine par & ou la fin de la chaîne ({{X5 }})

Démo

2
Dmitry Egorov 26 avril 2017 à 14:55

Vérifier que l'entrée contient p = comme cet exemple:

Méthode illustrée

public static string cleanString(string input)
{
    if (input.Contains("p=") && input.Contains("&"))
    {
        int startPos = input.IndexOf("p=");
        int endPos = input.IndexOf("&",startPos);
        input = input.Substring(0,startPos) + 
                                       input.Substring(endPos+1,(input.Length-1)-endPos);
    }

    return input;
}

Utilisation

cleanString("abc-def-c?p=2&x=5&z=6"));
cleanString("abc-def-c?"));
0
ΩmegaMan 26 avril 2017 à 15:26

Je n'aime pas les Regex, donc comme alternative si vous êtes le même, vous pouvez utiliser la classe affichée dans l'une des réponses à cette question;

Obtenir les paramètres d'URL à partir d'une chaîne dans .NET

Ce qui transforme la chaîne de requête en dictionnaire, puis prenez simplement toutes les clés sauf celle que vous souhaitez ignorer ...

0
Community 23 mai 2017 à 12:10