none
Ersten Buchstaben nach einem ";"-Zeichen in Grossschrift RRS feed

  • 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.

     

     

    Sonntag, 30. Oktober 2011 09:20

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
    Sonntag, 30. Oktober 2011 11:25

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
    Sonntag, 30. Oktober 2011 11:25
  • Danke,

    hat super funktioniert!

    Wieso verwendest du zur ausgabe 2 Argumente? [ "{0}" ]

    Koennte man das 1. nicht einfach weglassen?

     

    Wie kann man " match => match.Value.ToUpper()" verstehen?

     

     


    • Bearbeitet poitroae Sonntag, 30. Oktober 2011 11:49
    Sonntag, 30. Oktober 2011 11:48
  • 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
    Sonntag, 30. Oktober 2011 11:58
  • 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.

    Sonntag, 6. November 2011 19:40