2009-04-24 8 views
4

Je sais que vous pouvez utiliser la bibliothèque ctypes pour effectuer des comparaisons insensibles à la casse sur les chaînes, mais je souhaiterais également effectuer un remplacement insensible à la casse. Actuellement, la seule façon que je sais de le faire est avec Regex et il semble un peu pauvre de le faire via cela.Insensibilité à la casse dans les chaînes Python

Existe-t-il une version insensible à la casse de replace()?

+1

Pourquoi pensez-vous regex est pauvre? Quel est le problème avec regex? –

+0

Semble un trop Une façon compliquée de résoudre un problème simple, comme d'expédier une seule table de chevet dans un camion – Teifion

+0

nah - il devrait y avoir une, et de préférence une seule, façon évidente de le faire.Comme re sont grands pour sub-insensible à la casse, il serait briser ce principe de conception pour rendre plus compliqué, juste pour offrir une autre façon de faire exactement la même chose –

Répondre

10

Vous pouvez fournir le drapeau re.IGNORECASE aux fonctions dans le module re comme décrit dans le docs.

matcher = re.compile(myExpression, re.IGNORECASE) 
+0

Sûrement re serait mieux? – Teifion

+2

Vous utiliseriez l'objet retourné en compilant comme motif en re – zdan

+0

Ahhh et si je l'utilisais beaucoup d être plus rapide. Merci! – Teifion

1

Le moyen le plus simple est de tout convertir en minuscules puis de le remplacer. Mais est évidemment un problème si vous souhaitez conserver le cas d'origine.

Je voudrais faire un regex remplacer, vous pouvez demander au moteur Regex d'ignorer le boîtier tous ensemble.

Voir this site pour un exemple.

5

Utiliser re est la meilleure solution même si vous pensez que c'est compliqué.

Pour remplacer toutes les occurrences de 'abc', 'ABC', 'Abc', etc., avec 'Python', dites:

re.sub(r'(?i)abc', 'Python', a) 

session Exemple:

>>> a = 'abc asd Abc asd ABCDE XXAbCXX' 
>>> import re 
>>> re.sub(r'(?i)abc', 'Python', a) 
'Python asd Python asd PythonDE XXPythonXX' 
>>> 

Notez comment intégrer (?i) au début de la regexp rend sensible à la casse. A noter également le littéral pour l'expression rationnelle (qui dans ce cas précis chaîne r'...' est redondant, mais aide dès que votre regexp a antislashs (\) en eux.

Questions connexes