2010-07-02 7 views
1

Étant donné un motif p et une chaîne s, supposons que p soit en minuscules. Lequel des deux suivants est le plus efficace?expression régulière: Efficacité de la comparaison insensible à la casse

r = re.compile(r'p', RE.IGNORECASE) 
r.match(s) 

... ou ...

r = re.compile(r'p') 
r.match(s.lower()) 
+0

Nous supposons que le modèle est tout en minuscules pour # 2, non? Sinon, ils ne sont pas équivalents –

+1

Pendant le temps qu'il vous a fallu pour taper cette question, vous auriez pu comparer cela et obtenir une meilleure réponse à votre question. – ryeguy

+0

@ryeguy, Que voulez-vous dire par "benchmarké"? – Paul

Répondre

3

Il va vraiment dépendre de la langue et du moteur. s.lower() et re.IGNORECASE sont généralement seulement lent parce qu'ils essaient de traiter avec des chaînes de localisation ou Unicode (voir this question). Si le paquet regex que vous utilisez traite de cela, et que la méthode s.lower() ne le fait pas, alors la méthode s.lower() est une victoire claire. Et vice versa.

En général, je m'attendrais à ce que la méthode s.lower() soit plus rapide (elle a tendance à être plus optimisée que la correspondance regex). Mais dans l'exemple donné ...

r = re.compile(r'[Pp]') 
r.match(s) 

... va être plus rapide que l'un ou l'autre.

+0

Ceci est deux fois plus rapide que IGNORECASE, merci! '1.2s' contre' 660ms' sur les données de l'échantillon. – FelikZ