No Python, eu posso compilar uma expressão regular para não diferenciar maiúsculas de minúsculas usando re.compile
:
>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>>
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>
Existe uma maneira de fazer o mesmo, mas sem usar re.compile
. Não consigo encontrar nada como o i
sufixo do Perl (por exemplo m/test/i
) na documentação.
python
regex
case-sensitive
case-insensitive
Esteira
fonte
fonte
Respostas:
Passe
re.IGNORECASE
para oflags
param desearch
,match
ousub
:fonte
re.match('test', 'TeSt', re.IGNORECASE)
pode levar aTypeError
quando um dos atributos estáNone
. Usandotry & except
para capturar aTypeError
correspondência first_string == second_string. Exemplo de Códigodef equal_ignore_case(first_string, second_string): try: return re.match(first_string, second_string, re.IGNORECASE) is not None except (AttributeError, TypeError): return first_string == second_string
Demo CodeNone
primeira.flags
parare.sub
caso contrário, passare.IGNORECASE
aocount
argumento (s também. Stackoverflow.com/questions/42581/... )Você também pode executar pesquisas sem distinção entre maiúsculas e minúsculas usando a pesquisa / correspondência sem o sinalizador IGNORECASE (testado no Python 2.7.3):
fonte
(?(condition)yes|no)
que diz ter sido adicionado na 2.4), então espero que esteja sempre disponível desde a primeira versão dore
módulo, que eu acho que foi adicionada em 1.5. Basicamente desde o início dos tempos para todos os efeitos, quando se trata de Python. Ele está documentado sobre a meio da primeira seção desta página: docs.python.org/2/library/re.html#regular-expression-syntaxregex
módulo foi preterido em favor dore
módulo.re.match(r'''A ((?i)B) C''', "a b c").group(0)
causa uma correspondência que não diferencia maiúsculas de minúsculas em tudo (A e C), não apenas em B! Se você quer apenas insensibilizar maiúsculas e minúsculas em um grupo de captura específico, este não é o dróide que você está procurando.O marcador que não diferencia maiúsculas de minúsculas,
(?i)
pode ser incorporado diretamente no padrão regex:fonte
'(?i)'
abordagem também tem a vantagem de criar uma lista de regexp's, algumas que não diferenciam maiúsculas de minúsculas e outras não. (E, claro, você pode mapearre.compile
sobre essa lista, se quiser.)flags=re.IGNORECASE
?Você também pode definir distinção entre maiúsculas e minúsculas durante a compilação do padrão:
fonte
Nas importações
No processamento em tempo de execução:
Deve-se mencionar que não usar
re.compile
é um desperdício. Sempre que o método de correspondência acima for chamado, a expressão regular será compilada. Isso também é uma prática defeituosa em outras linguagens de programação. A seguir, é a melhor prática.Na inicialização do aplicativo:
No processamento em tempo de execução:
fonte
re.compile()
....fonte
Para executar operações que não diferenciam maiúsculas de minúsculas, forneça re.IGNORECASE
e se quisermos substituir o texto correspondente ao caso ...
fonte
Se você gostaria de substituir, mas ainda mantendo o estilo de str anterior. É possível.
Por exemplo: realce a sequência "test asdasd TEST asd tEst asdasd".
teste asdasd TEST asd tEst asdasd
fonte
Para Expressão regular sem distinção entre maiúsculas e minúsculas (Regex): Existem duas maneiras de adicionar seu código:
flags=re.IGNORECASE
O marcador que não diferencia maiúsculas de minúsculas
(?i)
fonte