Ankündigung

Einklappen
Keine Ankündigung bisher.

PythonCode verstehen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS/FS PythonCode verstehen

    Hallo,

    ich versuche mich gerade dabei einen Baustein zu verstehen abe rich finde im Netz keine passende Hilfe dazu.

    Könnte mir einer den folgenden Code erklären. 0-9a-zA-Z versteh ich ja noch aber was bedeutet \c-\.]{2,})$ ?
    Code:
                    if re.findall(r"SI([0-9a-zA-Z/\c-\.]{2,})$", recline):
                    self.Z2 = re.findall(r"SI([0-9a-zA-Z/\c-\.]{2,})$", recline)

    Danke und Grüße
    Jascha

    #2
    Reine Vermutung - ich denke es handelt sich um reguläre Ausdrücke. Da kämpfe ich mich aber nur ein, wenn es unbedingt nötig ist - und nach 10 Minuten ist alles wieder weg.

    Viel Erfolg
    Florian

    Kommentar


      #3
      Hallo Jascha,

      ja, es handelt sich um einen regulären Ausdruck. Der Teil
      Code:
      /\c
      sieht allerdings falsch aus.

      Mehr dazu
      https://docs.python.org/2/library/re.html
      https://regex101.com

      Bis bald

      Marcus

      Kommentar


        #4
        Hi,

        erstmals danke für die Antworten. Ja das hab ich mir schon fast gedacht. Im unteren Code aus einer früherern Logikfunktion geht alles wie es soll aber aus einer neuerern Version wo der Zusatz \c-\. geändert wurden ist nicht. Es soll wohl auch Wörter finden die ein - oder ein . als Trennungszeichen haben.

        Funktioniert, allerdings keine Anzeige wenn ein "Punkt" als Trennungszeichen da ist
        Code:
         if re.findall(r"SI([0-9a-zA-Z/\c-]{2,})$", recline):
        ##                   self.Z2 = re.findall(r"SI([0-9a-zA-Z/\c-]{2,})$", recline)

        Wie müsste ich es den ändern wenn auch ein Punkt als Trennungszeichen erkannt werden soll?

        Grüße


        Kommentar


          #5
          Das Problem ist das "-" bei. Im altern Ausdruck steht dieses an letzter Stelle in den [], dabei pass dies auf ein "-" im Text. Im neuen Ausdruck wird aber der Punkt "\." noch dahinter gesezt. Darsu ergibt sich eine Änderung der Bedeutung von "-" dasd jetzt einen Bereich definiert (so wie bei a-z). Dieser Bereich ist aber unzulässig. Es musshier entweder ein Backslash vorgestellt werden "\-" oder das "-" wieder and Ende vor dei "]" gestellt werden.

          "\."ist innerhalb der eckigen Klammern [] eigentlich auch nicht nötig "." genügt. Auch weis Ich nich twas das \c bedeuten soll, sollte das gleiche wie "c" (und somit schon in "a-z" enthalten) sein da mir keine spezielle Bedeutung voin \c (anders ale z.B. bei \s) bekannt ist.

          {2,} bedeutet dass der vorherige Ausdruck (hier die Zeichen innerhalb []) mindestens 2 mal vorhanden sein muss

          Kommentar


            #6
            Zitat von Gaston Beitrag anzeigen
            Das Problem ist das "-" bei. Im altern Ausdruck steht dieses an letzter Stelle in den [], dabei pass dies auf ein "-" im Text. Im neuen Ausdruck wird aber der Punkt "\." noch dahinter gesezt. Darsu ergibt sich eine Änderung der Bedeutung von "-" dasd jetzt einen Bereich definiert (so wie bei a-z). Dieser Bereich ist aber unzulässig. Es musshier entweder ein Backslash vorgestellt werden "\-" oder das "-" wieder and Ende vor dei "]" gestellt werden.

            "\."ist innerhalb der eckigen Klammern [] eigentlich auch nicht nötig "." genügt. Auch weis Ich nich twas das \c bedeuten soll, sollte das gleiche wie "c" (und somit schon in "a-z" enthalten) sein da mir keine spezielle Bedeutung voin \c (anders ale z.B. bei \s) bekannt ist.

            {2,} bedeutet dass der vorherige Ausdruck (hier die Zeichen innerhalb []) mindestens 2 mal vorhanden sein muss
            Vielen Dank für die super Erklärung. Dann kann ich ja jetzt den String ändern und werd dann sehen ob alles läuft.

            Grüße

            Kommentar


              #7
              Ich kann dir für sowas auch, wie schon von Marcus oben geschrieben, nur die Seite https://regex101.com/ empfehlen. Da kannst du das auch gleich live testen und es gibt eine gute Erklärung dazu

              Kommentar


                #8
                Zitat von marsie Beitrag anzeigen
                Ich kann dir für sowas auch, wie schon von Marcus oben geschrieben, nur die Seite https://regex101.com/ empfehlen. Da kannst du das auch gleich live testen und es gibt eine gute Erklärung dazu
                Cool, die Seite kannte Ich nich nicht.

                Für diejenigen die sich mit komplexeren Regex beschäftigen kann Ich das kostenpflichtige (30€) RegexBuddy empfehlen. Das Tool beherscht massig Regex Varianten, kann dazwischen konvertieren und die Ausdrücke mit Beispieltexten Debuggen so dass man genau herausfinden kann wo das Problem liegt.

                Kommentar


                  #9
                  Hi,

                  eine Frage ist aber noch um weiterzukommen.
                  Code:
                    if re.findall(r"PW(ON)$", recline):
                                     self.Z2 = re.findall(r"PW(ON)$", recline)
                                     ##print "Main Zone hat Wert " + self.Z2[0] + '\n'
                                     self.sendout(1,"<ALL><Power>" +'1'+ "</Power></ALL>")
                  Wenn ich jetzt eine zusätzliches sendout reinbringen möchte wie " self.sendout(1,"<ZM><Power>" +'1'+ "</Power></ZM>") " klappt es nicht wenn ich es einfach als weitere Zeile darunter setze. Was muss ich also gemacht werden damit er die beiden Befehle gleichzeitig sendet?

                  Grüße

                  Kommentar

                  Lädt...
                  X