Dienstag, Dezember 10, 2019

Mit mehr als einer Flagge in python re.findall

Möchte ich verwenden mehr als eine Flagge mit der re.findall Funktion. Genauer gesagt, ich möchte die IGNORECASE und DOTALL Flaggen zur gleichen Zeit.

x = re.findall(r'CAT.+?END', 'Cat \n eND', (re.I, re.DOTALL))

Fehler :

Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    x = re.findall(r'CAT.+?END','Cat \n eND',(re.I,re.DOTALL))
  File "C:\Python27\lib\re.py", line 177, in findall
    return _compile(pattern, flags).findall(string)
  File "C:\Python27\lib\re.py", line 243, in _compile
    p = sre_compile.compile(pattern, flags)
  File "C:\Python27\lib\sre_compile.py", line 500, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Python27\lib\sre_parse.py", line 673, in parse
    p = _parse_sub(source, pattern, 0)
  File "C:\Python27\lib\sre_parse.py", line 308, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Python27\lib\sre_parse.py", line 401, in _parse
    if state.flags & SRE_FLAG_VERBOSE:
TypeError: unsupported operand type(s) for &: 'tuple' and 'int'

Gibt es eine Möglichkeit, um mehr als eine fahne ?

  • Finden Sie in der Dokumentation zum re.kompilieren.
  • In Ergänzung zu @PeterWood link: docs.python.org/2.7/howto/regex.html#compilation-flags
  • Wenn Sie verwenden eine Menge von regex, ist es immer besser, in-line-Modifikatoren wenn Sie können. Vor allem, weil Sie nicht wirklich mit FLAGS mit der FindAll-Funktion, werden Sie weitergegeben werden und an dem Regulären Ausdruck Objekt. Die Modifikatoren binden Sie an die regex-Objekts, nicht die regex-Nutzung-Funktionen. Also, wenn Sie Ausschneiden und einfügen eine regex irgendwo sonst, Sie müssen nicht sorgen zu machen über die Flaggen überhaupt. Also r'(?si)CAT.+?END' ist der beste Weg.
InformationsquelleAutor Pavan | 2015-06-04

3 Kommentare

  1. 35

    Ja, aber Sie müssen ODER Sie zusammen:

    x = re.findall(r'CAT.+?END','Cat \n eND',re.I | re.DOTALL)
  2. 8

    Können Sie nicht setzen der flags in ein Tupel. Verwenden Sie das pipe-Zeichen (ODER Operanden) innerhalb Ihres flags:

    x = re.findall(r'CAT.+?END','Cat \n eND',flags=re.I | re.DOTALL)

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...