2017-01-17 5 views
1

Ich habe folgende Eingabe zu ersetzen:RegexMuster einen String

Person 1kg 

die erwartete Ausgabe zu erhalten:

Person 1kEq 

ich folgendes Muster verwende:

string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape("kg")); 
Regex.Replace(inputSentence, Pattern, "kEq"); 

Die Regex.Replace ersetzt nicht kg durch kEq.

Wenn ich den Eingang Satz Person 1 kg bearbeiten die Ersetzung geschieht,

mir jemand könnte für diesen mit dem Muster helfen?

Antwort

3

Die (?<!\S) erfordert entweder einen Anfang der Zeichenfolge oder ein Leerzeichen vor dem kg Suchbegriff. Die (?!\S) Lookahead erfordert das Ende der Zeichenfolge oder ein Leerzeichen nach dem Suchbegriff. Deshalb erfolgt der Austausch, wenn Sie die Nummer und die Maßeinheit mit einem Leerzeichen wie in Person 1 kg trennen.

Es scheint in diesem Fall, Sie möchten eine Übereinstimmung ersetzen, wenn es nicht mit anderen Buchstaben eingeschlossen ist. Verwenden Sie (?<!\p{L}) Lookbehind zu Beginn und (?!\p{L}) Look-Ahead am Ende:

string.Format(@"(?<!\p{{L}}){0}(?!\p{{L}})", Regex.Escape("kg")); 

Siehe regex demo.

+0

Ich bekomme eine FormatException, wenn ich diese obige Muster/C# -Anweisung verwende, könnten Sie mir bitte helfen? – Sandepku

+1

Sorry, ich erinnere mich immer daran, die geschweiften Klammern mit begrenzenden Quantifizierern zu verdoppeln und habe vergessen, dasselbe mit der Unicode-Kategorie-Klasse zu tun. –