2017-04-26 6 views
1

Ich versuche, eine Zeichenfolge zu bearbeiten, und ich möchte einige Zeichen darin entfernen.Ersetzen von Zeichen zwischen zwei Zeichen

Beispielszenario:

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

ich alle Zeichen ab p und endend mit dem char nächsten & oder ? mit leeren Zeichen ersetzt werden soll. Löschen sie auf eine Art und Weise.

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

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

Ich weiß, dass ich dies mit Substring erreichen kann, IndexOf und Replace, aber leider gibt es ein Problem, dass p, x, y Teile in dieser Reihenfolge nicht alles sein können die Zeit. Ich brauche etwas, das nur das Teil finden und ersetzen würde.

Meine Regex-Fähigkeiten sind nicht so gut, so dass jede Hilfe geschätzt wird.

+0

Ja, das sieht ziemlich gut aus, was ich machen will –

+0

@john reguläre Ausdrücke sind nicht anders in C# .... – Milney

+0

@John - das ist PERL diejenigen, die anders sind (weil es eine trendige Ninja Skriptsprache ist). .Net verwendet die Standardsyntax, genau wie die meisten Orte, die Regex unterstützen. Die/-Zeichen geben an, dass dies eine Regex ist, wie runde Strings. Sie würden nicht sagen, dass Strings anders sind, wenn die Anführungszeichen, die sie beginnen und beenden, sind anders ... ich hoffe? – Milney

Antwort

2

diese regex Versuchen:

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

Es passt p= mit vorangestelltem ? oder & ((?<=[?&])) und gefolgt von einem Zeichenfolgenwert, der entweder mit & endet oder am Ende der Zeichenfolge ((?:&|$))

Demo

+0

Sieht gut aus, wie kann ich dafür sorgen, dass es auch den nächsten & char enthält? –

+0

@EgeBayrak: Bitte beachten Sie die aktualisierte Antwort –

+0

@EgeBayrak Sie wollen wahrscheinlich die vorherige & char nicht die nächste. – thinklarge

0

Ich mag nicht Regexs so als Alternative, wenn Sie gleich sind, könnten Sie die Klasse in einer der Antworten auf diese Frage geschrieben verwenden;

Get url parameters from a string in .NET

Welche Abfrage-Zeichenfolge in ein Wörterbuch dreht, und dann nehmen Sie einfach alle Tasten außer die, die Sie ignorieren möchten ...

0

Kontrolleingang enthält von p = wie in diesem Beispiel:

gezeigte Verfahren

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

Usage

cleanString("abc-def-c?p=2&x=5&z=6")); 
cleanString("abc-def-c?")); 
Verwandte Themen