2008-10-21 9 views
5

Pexpect kann verwendet werden, um Aufgaben in Python zu automatisieren (TCL muss nicht installiert werden). Eine der einfachsten Routinen dieser Klasse ist die Routine 'run()'. Es akzeptiert ein Wörterbuch der erwarteten Frage Muster als Schlüssel und die Antworten als Werte. Zum BeispielWas bedeutet "(? I) password" im regulären Python-Ausdruck?

pexpect.run ('scp foo [email protected] :.', Veranstaltungen = { '(i) Passwort?': Mypassword})

Ich weiß, dass in der Regel '?' wird verwendet, um 0 oder 1 Vorkommen des vorherigen Literals in der Zeichenkette anzugeben (dies gilt für reguläre Ausdrücke). Aber hier scheint dies nicht die Bedeutung zu sein.

Können Experten kommentieren, was ist das?

Antwort

8

https://docs.python.org/library/re.html#regular-expression-syntax

(? ...) Dies ist eine Erweiterung Notation (eine "?" Nach einem "(" ist nicht sinnvoll sonst). Die ersten Zeichen nach dem "?" Bestimmt . , was die Bedeutung und weitere Syntax von das Konstrukt Erweiterungen in der Regel nicht schaffen, eine neue Gruppe; (? P ...) zu diese Regel die einzige Ausnahme ist die derzeit unterstützten Erweiterungen Im Folgenden sind

..

(? ILmsux) (Ein oder mehrere Buchstaben von die Menge "i", "L", "m", "s", "u", "x".) Die Gruppe stimmt mit der leeren Zeichenfolge überein; die Buchstaben setzen die entsprechenden Flags (re.I, re.L, re.M, re.S, re.U, re.X) ​​für den gesamten regulären Ausdruck. Dies ist nützlich, wenn Sie möchten, dass die Flags als Teil des regulären Ausdrucks enthält, anstatt ein Flag-Argument an die compile() -Funktion zu übergeben.

Beachten Sie, dass das Flag (? X) ändert, wie der Ausdruck analysiert wird. Es sollte zuerst in der Ausdrucksstring, oder nach einem oder mehreren Leerzeichen Zeichen verwendet werden. Wenn Nicht-Leerzeichen Zeichen vor dem Flag sind, sind die Ergebnisse nicht definiert.

Also in diesem Fall ist die Zeichenfolge ein regulärer Ausdruck, und die Groß- und Kleinschreibung wird ignoriert.

4

Dies ist eine Erweiterung der regulären Ausdruckssyntax im re-Modul von Python. Das "i" bedeutet "Groß-/Kleinschreibung ignorieren". Dies bedeutet, dass eine Suche nach "Passwort" nach Groß- und Kleinschreibung erfolgt.

von https://docs.python.org/library/re.html#regular-expression-syntax

(? ILmsux) (ein oder mehr Buchstaben aus dem Satz "I", "L", "m", "s", "u", "x"). Die Gruppe stimmt mit der leeren Zeichenfolge überein. Die Buchstaben setzen die entsprechenden Flags (re.I, re.L, re.M, re.S, re.U, re.X) ​​ für den gesamten regulären Ausdruck. Dies ist nützlich, wenn Sie die Flags als Teil des regulären -Ausdrucks enthalten möchten, anstatt ein Flag Argument an die compile() - Funktion zu übergeben.

Beachten Sie, dass das Flag (? X) ändert, wie der Ausdruck analysiert wird. Es sollte zuerst im Ausdruck Zeichenfolge oder nach einem oder mehreren Leerzeichen verwendet werden. Wenn Nicht-Leerzeichen Zeichen vor dem Flag sind, sind die Ergebnisse nicht definiert.