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. Alsor'(?si)CAT.+?END'
ist der beste Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, aber Sie müssen ODER Sie zusammen:
Es wurde nicht erwähnt, aber Sie können inline
(?...)
Modifikatoren als gut.Können Sie nicht setzen der flags in ein Tupel. Verwenden Sie das pipe-Zeichen (ODER Operanden) innerhalb Ihres flags: