Announcement

Collapse
No announcement yet.

RegEx-Ausdruck negieren

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

  • RegEx-Ausdruck negieren

    Hallo zusammen,

    habe ein "kleines" Problem:

    dieser RegEx-Ausdruck [A-Z]{1,3}[-][A-Z]{2}\s*[1-9]{1}[0-9]{0,3} soll negiert werden, damit ich - mit Hilfe der "Replace"-Methode eines RegEx-Objektes - nur das erhalte, was auf diesen Ausdruck matcht (Rest wird durch "" ersetzt)...

    Ich bekomme es nicht hin.

    Wer kann mir helfen???

    Uwe Zimmermann

  • #2
    Kenne c# nicht, üblicherweise negiert man mit

    ^

    Im Rahmen von if kann man schreiben

    if(!i=0)

    wenn i nicht =0 ist

    Also könnte das

    if(![A-Z]{1,3}[-][A-Z]{2}\s*[1-9]{1}[0-9]{0,3})

    oder if(^[A-Z]{1,3}[-][A-Z]{2}\s*[1-9]{1}[0-9]{0,3}) sei
    Christian

    Comment


    • #3
      Sehr geehrter Herr Marquardt,

      danke für die Antwort!

      Es handelt sich hierbei aber nicht um das negieren eines bool'schen C#-Ausdrucks, sondern halt um einen regex-Ausdruck.

      Ich bin neu in dieser Materie und weiß aber, dass man hier üblicherweise negiert in dieser Form [^abc]. Dies bedeutet z. B. "alles, was nicht a, b oder c ist"...

      Wie kann ich denn nun einen RegEx(!)-Ausdruck wie z. B. diesen [A-Z0-9]){17} negieren?

      Also, dass alles matcht, was NICHT auf diesen Ausdruck passt...

      Uwe Zimmerman

      Comment


      • #4
        Der o. g. RegEx-Ausdruck muss natürlich so aussehen: [A-Z0-9]{17}! (Die schließende Klammer war zuviel...)

        Uwe Zimmermann

        P. S. Liebe Experten! Bitte helft mir, ich bin am verzweifeln :-

        Comment


        • #5
          wieso kann man im code nicht abfragen, ob dieser ausdruck gematcht wird - und dann entscheiden, was tun bzw. nicht?

          verstehe nicht, warum die negierung im ausdruck passieren muss - scheint ja unnötig kompliziert zu sein.

          bo

          PS: regex ist nicht meine stärke, deshalb halte ich mich da raus

          Comment


          • #6
            Ich möchte aus einem Quellstring (Zeile) einen Wert extrahieren, der einem bestimmten Format (daher ein RegEx-Pattern) entspricht. Um nur diesen Wert zu erhalten, will ich alles andere durch Leerzeichen - wie bereits erwähnt - mit Hilfe der "Replace"-Methode eines RegEx-Objektes ersetzen. Hierfür brauche ich das "negierte" RegEx-Pattern, das auf meinen zu extrahierenden Wert matcht. So erhalte ich nur diesen...

            Doch wie "negiere" ich so ein Pattern???

            Uwe Zimmerman

            Comment


            • #7
              im vs.net habe ich folgendes gefunden:

              string text = "One car red car blue car";
              string pat = @"(?<1>\w+)\s+(?<2>car)\s*";
              // Compile the regular expression.
              Regex r = new Regex(pat, RegexOptions.IgnoreCase);
              // Match the regular expression pattern against a text string.
              Match m = r.Match(text);
              while (m.Success)
              {
              // Display the first match and its capture set.
              System.Console.WriteLine("Match=[" + m + "]");
              CaptureCollection cc = m.Captures;
              foreach (Capture c in cc)
              {
              System.Console.WriteLine("Capture=[" + c + "]");
              }
              // Display Group1 and its capture set.
              Group g1 = m.Groups[1];
              System.Console.WriteLine("Group1=[" + g1 + "]");
              foreach (Capture c1 in g1.Captures)
              {
              System.Console.WriteLine("Capture1=[" + c1 + "]");
              }
              // Display Group2 and its capture set.
              Group g2 = m.Groups[2];
              System.Console.WriteLine("Group2=["+ g2 + "]");
              foreach (Capture c2 in g2.Captures)
              {
              System.Console.WriteLine("Capture2=[" + c2 + "]");
              }
              // Advance to the next match.
              m = m.NextMatch();
              }

              diese captures können auch den index und länge des teilstrings liefern - damit kannst du auch deine quellzeile durchgehen und einen "sauberen" string wieder zusammenbauen.

              das mit dem negieren stelle ich mir schwieriger vor.

              b

              Comment


              • #8
                Warum bin ich da nicht drauf gekommen? Mit dem Pattern habe ich doch schon den Wert, den ich extrahieren will! Und diesen Wert als Substring zu eliminieren, das kriege ich ja noch hin, denke ich :-)

                Danke! Das ist eine Lösung. Dazu fällt mir noch ein: Warum einfach, wenn es auch kompliziert geht? :-

                Comment


                • #9
                  ach, passiert mir auch oft...irgendwann (ewig später) geht dann ein licht auf!

                  bo :-

                  Comment


                  • #10
                    Danke nochmals für die Hilfe! Hat mir sehr geholfen...

                    Uwe Zimmerman

                    Comment

                    Working...
                    X