Beachten Sie, dass ein Regex-Ansatz für eine Aufgabe wie diese nicht ganz gut klingt. Es kann für kleine Eingabe-Strings verwendet werden, für größere wird empfohlen, dass Sie mehr Logik schreiben und Text Zeile für Zeile analysieren.
also mehr von akademischem Interesse, hier ist eine Regex-Lösung zeigt, wie mit unterschiedlichen Ersatzmustern auf der Grundlage zu ersetzen, ob die Leitung angepasst ist erstes oder nicht:
var pat = @"(?m)(?:(\A)|^(?!\A))(.*\b\s+(\d+)\r?\n)";
var s = "10 25\n32 44\n56 88\n102 127\n135 14510 25\n32 44\n56 88\n102 127\n135 145";
var res = Regex.Replace(s, pat, m => m.Groups[1].Success ?
$"0 {m.Groups[2].Value}{m.Groups[3].Value} " : $"{m.Groups[2].Value}{m.Groups[3].Value} ");
Ergebnis der C# demo:
0 10 25
25 32 44
44 56 88
88 102 127
127 135 14510 25
25 32 44
44 56 88
88 102 127
127 135 145
Beachten Sie die \n
Zeilenumbrüche sind hart codiert, aber es ist immer noch nur eine Illustration der Regex-Funktionen.
Muster Details
(?m)
- ein Inline-RegexOptions.Multiline
Modifikator
(?:(\A)|^(?!\A))
- eine Nicht-Erfassung Gruppenanpassung entweder
(\A)
- Beginn der Zeichenkette, die es zu Gruppen Erfassung 1
|
- oder
^(?!\A)
- Anfang einer Zeile (aber nicht Zeichenfolge aufgrund der (?!\A)
negativen Vorschau)
(.*\b\s+(\d+)\r?\n)
- Gruppe 2:
.*\b
- 0+ Zeichen außer Newline zur letzten Wortgrenze bis auf eine Linie, gefolgt mit ...
\s+
- 1+ Leerzeichen
(\d+)
(mit [\p{Zs}\t]+
nur übereinstimmen horizontal Leerzeichen ersetzt werden) - Gruppe 3: ein oder mehr Dig seine
\r?\n
- eine CRLF oder LF Leitungsunterbrechung.
Der Ersatz Logik ist im Inneren des Spiel Auswerter: Gruppe 1, wenn angepaßt (m.Groups[1].Success ?
) ersetzen mit 0
und Gruppe 2 Gruppe 3 + Werte + Raum. Else, ersetzen durch Gruppe 2 + Gruppe 3 + Leerzeichen.
Auch wenn es möglich ist, warum wollen Sie Regex dafür verwenden, würde das nicht mit einer fast unlesbaren Funktion enden? – Dale
Regex ist das letzte Werkzeug, das ich dafür verwenden würde. – Amy
@Amy, ich würde Regex nach der Verwendung meiner letzten verfügbaren Werkzeug ... – taquion