Announcement

Collapse
No announcement yet.

Textbox: Text markieren per RegEx - Problem mit Zeilenende

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Textbox: Text markieren per RegEx - Problem mit Zeilenende

    Hallo zusammen,

    ich habe ein kleines Problem. Ich möchte in einer Textbox (in meinem Fall in einer WPF-Anwendung, aber das dürfte egal sein) Text markieren wenn ich einen Doppelklick darauf mache. Dies funktioniert ja eigentlich schon OutOfTheBox, aber da die Bedingungen, welcher Text, wie weit markiert werden soll, anders sind als der Standard, suche ich mir den Start- und Endpunkt der Markierung mit Hilfe von Regulären Ausdrücken.
    Das funktioniert soweit auch ganz gut, solange der zu markierende Text nicht bis an das Zeilenende reicht.

    Beispiel:
    In der Textbox steht "Dies ist ein Text" (ohne die Anführungszeichen) und ich mache einen doppelklick auf "Dies", dann wird das Wort korrekt markiert.
    Mache ich jedoch einen Doppelklick auf "Text", beispielsweise genau zwischen dem "e" und dem "x" dann wird mir nur "Te" markiert und nicht "Text".

    Ich weiß nicht wo hier der Fehler liegt.
    Sieht von Euch vielleicht jemand, wo ich was falsch mache?


    Dies ist mein Code:
    [highlight=c#]
    private void txtValue_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
    int start = 0;
    int ende = 0;
    start = Regex.Match(txtValue.Text.Substring(0, txtValue.SelectionStart), @"[^-_$a-zA-Z0-9äöüÄÖÜ\.]", RegexOptions.RightToLeft).Index;
    ende = Regex.Match(txtValue.Text.Substring(txtValue.Selec tionStart), @"[^-_$a-zA-Z0-9äöüÄÖÜ\.]").Index;
    ende = txtValue.Text.Substring(0, txtValue.SelectionStart).Length + ende;
    if (start == -1) start = 0;
    if (ende == -1) ende = txtValue.Text.Length;
    txtValue.Select(start == 0 ? 0 : start + 1, start == 0 ? ende - start : ende - start - 1);
    e.Handled = true;
    }
    [/highlight]

  • #2
    Wenn ich das richtig verstehe suchst du mit den regl. Ausdrücken nach der Position die nicht mehr dem Ausdruck entspricht. Das erstemal von rechts nach links. Da ist es besser mit \b die Wortgrenze zu finden. Das könnte das Problem mit dem Zeilenende in die andere Richtung beheben. Ggf. wäre ein ODER zu nutzen, dass eben dann nur bis zum Zeilenende sucht
    Christian

    Comment


    • #3
      Hmm...
      Ich muss Worte markieren, die Punkte, Striche oder Dollarzeichen beihalten können. Die Suche nach der Wortgrenze, bzw. den Grenzen, trifft dann nicht mehr richtig.
      Hier ein paar Beispiele, wie zu treffnde Wörter aussehen können:
      Test.Wort
      f$Test
      ein_neues_Wort.bla

      Das mit dem Oder versteh ich nicht. Dafür kenn ich mich auch mit RegEx zu schlecht aus, denke ich.

      Comment


      • #4
        Dann prüfe auf \s. http://msdn.microsoft.com/de-de/libr...racter_classes
        Christian

        Comment


        • #5
          Danke für den Link, das hat geholfen.
          Wenn ich bein bestimmen des Endes "|$" einfüge, dann passt es jetzt.
          Der Ausdruck sieht dann so aus:


          [^-_$a-zA-Z0-9äöüÄÖÜ\.]|$

          Comment


          • #6
            Das war das mit dem ODER.....
            Christian

            Comment


            • #7
              Hallo Andreas,

              du hast äöüÄÖÜ in die Liste aufgenommen, aber kein ß. Hat das einen bestimmten Grund?

              Gruß Womble

              Comment


              • #8
                Originally posted by Womble View Post
                Hallo Andreas,

                du hast äöüÄÖÜ in die Liste aufgenommen, aber kein ß. Hat das einen bestimmten Grund?

                Gruß Womble
                Hab ich vergessen. Danke

                Comment

                Working...
                X