Benutzer mit den meisten Antworten
Ersten Buchstaben nach einem ";"-Zeichen in Grossschrift

Frage
-
Hallo,
Ich habe einen Text, den es zu korrigieren gilt.
In diesem Schritt moechte ich alle 1. Buchstaben nach einem Semikolon gross schreiben.
Gibt es hierfuer eine findige (Regex?) Loesung?
Ich haette es vermutlich mit suchen von ";" gemacht, und dann char-weise weiter nach einem printable char, diesen dann gross gemacht.
Antworten
-
Hier mal ein Beispiel, dass per Regex.Replace nach einem Semikolon gefolgt von einem "Wortzeichen" sucht und dann mit dem Resultat von ToUpper ersetzt:
string pattern = @";(\w)"; string input = "Dies ist eine Test;dies ist ein Test;dies ist ein Test."; Console.WriteLine("{0}", Regex.Replace(input, pattern, match => match.Value.ToUpper()));
Resultat für das Beispiel ist dabei "Dies ist eine Test;Dies ist ein Test;Dies ist ein Test.". Mit \w wird dabei eventuell oder vermutlich nach mehr Zeichen gesucht, als du unter "Buchstaben" verstehst, aber man kann da natürlich auch einen genaueren Bereich angeben, an der Verwendung von Replace ändert das nichts.
MVP Data Platform Development My blog- Als Antwort vorgeschlagen Martin Honnen Sonntag, 30. Oktober 2011 13:07
- Als Antwort markiert Elmar BoyeEditor Montag, 7. November 2011 09:20
Alle Antworten
-
Hier mal ein Beispiel, dass per Regex.Replace nach einem Semikolon gefolgt von einem "Wortzeichen" sucht und dann mit dem Resultat von ToUpper ersetzt:
string pattern = @";(\w)"; string input = "Dies ist eine Test;dies ist ein Test;dies ist ein Test."; Console.WriteLine("{0}", Regex.Replace(input, pattern, match => match.Value.ToUpper()));
Resultat für das Beispiel ist dabei "Dies ist eine Test;Dies ist ein Test;Dies ist ein Test.". Mit \w wird dabei eventuell oder vermutlich nach mehr Zeichen gesucht, als du unter "Buchstaben" verstehst, aber man kann da natürlich auch einen genaueren Bereich angeben, an der Verwendung von Replace ändert das nichts.
MVP Data Platform Development My blog- Als Antwort vorgeschlagen Martin Honnen Sonntag, 30. Oktober 2011 13:07
- Als Antwort markiert Elmar BoyeEditor Montag, 7. November 2011 09:20
-
-
Was das
Console.WriteLine("{0}", ...)
angeht, hast du recht, da reicht
Console.WriteLine(...)
Aus Gewohnheit habe ich da die Form mit dem Platzhalter verwendet, die ist ja auch flexibler, sobald man mehrere Werte in einem Satz oder Format ausgeben will.
match => match.Value.ToUpper()
ist ein Lambda-Ausdruck, siehe dazu http://msdn.microsoft.com/en-us/library/bb397687.aspx. Eine Überladung der Replace-Methode nimmt als drittes Argument ein Delegat oder eine anonyme Funktion, die als Argument eine Instanz der Klasse http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.aspx erhält und dann als Resultat die Zeichenkette zurückgibt, die als Ersetzung des "gematchten" Wertes eingefügt werden soll.
MVP Data Platform Development My blog -
Noch eine kleine Zusatzfrage zu folgendem Code:
List<string> items = Helper.LoadListFromFile("zit.txt", '|'); for (int i = 0; i != items.Count; ++i) { items[i] = Regex.Replace(items[i], @"(:|;|\.)\s+\w", match => match.Value.ToUpper()); }
Was ist der beste Weg, die Anzahl der Ersetzungen zu zaehlen?Man koennte natuerlich den Rueckgabewert in eine 2. String-Variable speichern und dann alten mit neuem String vergleichen. Das ist sicher jedoch die schlechteste Moeglichkeit, da String Vergleiche sehr aufwaendig sind.