2009-03-29 18 views
3

, wenn ich eine Zeichenfolge wie diese haben „Hallo - Welt - Hallo Welt“C# Regex ersetzen Frage

Ich möchte die Zeichen ersetzen vor der ersten Instanz der Teilkette „-“

z.B. so die oben mit "SUPERDOOPER" ersetzen lassen würde: "SUPERDOOPER - Welt - Hallo Welt"

Bisher habe ich dies: "^ [^ -] * -"

Aber dazu gehört auch die "-" die ist falsch.

wie geht das mit regex bitte?

Antwort

3

Verwenden Sie eine non-capturing group, die vor dem Muster sucht, um die Übereinstimmung zu überprüfen, aber diese Zeichen nicht in die Übereinstimmung selbst einbezieht.

Edit: nach dem Nachdenken darüber, scheint das ein wenig überflüssig. Wäre nicht diese Arbeit ?:

^[^-]* 

Ruft alle nicht-Strich-Zeichen zwischen dem Anfang des Strings und wird fortgesetzt, bis es einen Strich trifft? Oder müssen Sie auch den Raum ausschließen? Wenn ja, mit dem ersten gehen.

+0

Nicht-Erfassung Gruppe nicht Gruppe erstellen, sondern umfassen das seinerseits in die ganze Partie (Gruppe # 0). Also, dein erstes Beispiel wird nicht funktionieren. – Rorick

0

Könnten Sie das nicht einfach tun?

Regex.Replace ("Welt - Hallo Welt", "^ [^ -] * -", "SUPERDOOPER -");

0
Regex.Replace(input, @"(Hello)(-.*\1)", @"SUPERDOOPER$2"); 
0

Das Muster: - (. - +) ([^] +)

Erster Ausdruck entspricht einer beliebigen Reihe von Zeichen nicht einen Strich darunter. Dann gibt es einen Platz. Der zweite Ausdruck beginnt mit einem Gedankenstrich und einem Leerzeichen, gefolgt von einer Folge von einem oder mehreren "beliebigen" Zeichen.

Der Ersatz: "Superdooper $ 2"

liefert Superdooper - Welt - Hallo Welt

0

Sie versuchen regex mit positiver Vorschau verwenden, können: "^[^-]*(?= -)". Soweit ich weiß, unterstützt C# es. Dieser Regex entspricht genau was Sie wollen. Sie können mehr über Lookahead, Look-Behind und andere fortgeschrittene Regex-Techniken in berühmten Buch "Mastering Regular Expressions" herausfinden.

1

Warum denken Sie, dass Sie einen regulären Ausdruck für eine String-Operation wie diese verwenden müssen?

Dies ist einfacher und efficent:

str = "SUPERDOOPER" + str.Substring(str.IndexOf(" -")); 
+0

danke Guffa, das ist die Lösung, mit der ich ging. Danke auch an alle anderen für ihre Antworten. Ich habe viel von diesem Beitrag gelernt. Prost! –