2015-09-10 3 views
0

У меня следующий код:Python re.compile: неподдерживаемый тип операнда (ов) для &: ул и Int

import re 
r = re.compile('^[0-9 ]{1,4}Ty', 'i') 

я получаю неожиданное сообщение об ошибке:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.4/re.py", line 219, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib/python3.4/re.py", line 275, in _compile 
    bypass_cache = flags & DEBUG 
TypeError: unsupported operand type(s) for &: 'str' and 'int' 

Как это исправить?

+1

Просто используйте 're.I' – vaultah

+0

@vaultah спасибо,' re.IGNORECASE' вместо '' i'' работает. – Croll

ответ

5

'i' не является допустимым значением флага, потому что all compilation flags used by re functions должны быть целыми числами (re использует операции побитового манипулировать флаги).

Использование re.I (или re.IGNORECASE) вместо

import re 
r = re.compile('^[0-9 ]{1,4}Ty', re.I) 

Технически можно указать флаги в виде строк, но в этом случае они должны быть включены в шаблон:

import re 
r = re.compile('(?i)^[0-9 ]{1,4}Ty') 

От docs:

(?aiLmsux)

One or more letters from the set 'a' , 'i' , 'L' , 'm' , 's' , 'u' , 'x' . The group matches the empty string; the letters set the corresponding flags.

Таким образом, (?i) имеет такой же эффект, как и прохождение re.I (или re.IGNORECASE) до compile.

0

Флаги предопределенные константы в re модуля:

re.compile('..', re.IGNORECASE). 
Смежные вопросы