En Python, je peux compiler une expression régulière pour être insensible à la casse en utilisant 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-t-il un moyen de faire de même, mais sans utiliser re.compile
. Je ne trouve rien comme le i
suffixe de Perl (par exemple m/test/i
) dans la documentation.
Réponses:
Passez
re.IGNORECASE
à l'flags
PARAMsearch
,match
ousub
:la source
re.match('test', 'TeSt', re.IGNORECASE)
peut conduire à l'unTypeError
ou l'autre des attributsNone
. Utilisertry & except
pour attraper laTypeError
correspondance par first_string == second_string. Exemple de code dedef 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
démonstration de codeNone
première.flags
pourre.sub
sinon il passere.IGNORECASE
à l'count
argument (s aussi. Stackoverflow.com/questions/42581/...~~V~~singular~~3rd )Vous pouvez également effectuer des recherches insensibles à la casse en utilisant la recherche / correspondance sans l'indicateur IGNORECASE (testé en Python 2.7.3):
la source
(?(condition)yes|no)
elle a été ajoutée en 2.4), donc je m'attends à ce qu'elle soit toujours disponible depuis la première version dure
module, qui, je pense, a été ajoutée en 1.5. Fondamentalement depuis le début des temps à toutes fins utiles en ce qui concerne Python. Il est documenté à mi-chemin de la première section de cette page: docs.python.org/2/library/re.html#regular-expression-syntaxregex
module a été déconseillé en faveur dure
module.re.match(r'''A ((?i)B) C''', "a b c").group(0)
provoque une correspondance insensible à la casse sur tout (A et C), pas seulement sur B! Si vous ne voulez que la casse insensible sur un groupe de capture spécifique, ce n'est pas le droïde que vous recherchez.Le marqueur insensible à la casse
(?i)
peut être incorporé directement dans le motif d'expression régulière:la source
'(?i)'
approche présente également l'avantage que vous pouvez créer une liste d'expressions rationnelles, dont certaines ne respectent pas la casse et d'autres non. (Et bien sûr, vous pouvez cartographierre.compile
cette liste si vous le souhaitez.)flags=re.IGNORECASE
?Vous pouvez également définir la casse lors de la compilation du modèle:
la source
Dans les importations
En cours d'exécution:
Il convient de mentionner que ne pas utiliser
re.compile
est un gaspillage. Chaque fois que la méthode de correspondance ci-dessus est appelée, l'expression régulière est compilée. C'est également une pratique défectueuse dans d'autres langages de programmation. Ce qui suit est la meilleure pratique.Dans l'initialisation de l'application:
En cours d'exécution:
la source
re.compile()
la source
Pour effectuer des opérations insensibles à la casse, fournissez re.IGNORECASE
et si nous voulons remplacer le texte correspondant à la casse ...
la source
Si vous souhaitez remplacer tout en conservant le style de la chaîne précédente. C'est possible.
Par exemple: mettez en surbrillance la chaîne "test asdasd TEST asd tEst asdasd".
test asdasd TEST asd tEst asdasd
la source
Pour l'expression régulière insensible à la casse (regex): Il existe deux façons d'ajouter votre code:
flags=re.IGNORECASE
Le marqueur insensible à la casse
(?i)
la source