Mi piacerebbe abbinare le stringhe, usando il modulo regex di Pythons.Python regex lento quando gli spazi bianchi nella stringa
Nel mio caso, voglio verificare che le stringhe inizino, finiscano e siano costituite da lettere maiuscole unite da "_". Ad esempio, la seguente stringa è valida: "MY_HERO2". Le seguenti stringhe non sono validi: "_MY_HREO2", "MY HERO2", "MY_HERO2_"
Per convalidare una stringa che uso questo codice:
import re
my_string = "MY_HERO"
p = re.compile("^([A-Z,0-9]+_??)+[A-Z,0-9]$")
if p.match(my_string):
print "validated"
Allora, qual è il mio problema? Convalidare la stringa lunga che contiene gli spazi bianchi è molto, molto lento. Come posso evitare questo? Il mio modello è sbagliato? Qual è la ragione di questo comportamento?
Ecco alcuni numeri:
MY_HERO2 --> 53 ms
MY_SUPER_GREAT_UNBELIEVABLE_HERO --> 69 microseconds
MY_SUPER_GREAT_UNBELIEVABLE HERO --> 223576 microseconds
MY_SUPER_GREAT_UNBELIEVABLE_STRONG_HERO --> 15 microseconds
MY_SUPER_GREAT_UNBELIEVABLE_STRONG HERO --> 979429 microseconds
Grazie per i vostri anwsers e le risposte in anticipo. :-) Paul
La stringa non può iniziare o terminare con un trattino? e perché stai usando le virgole ',' nelle classi dei personaggi, sono permessi? –
Sembra un caso di malavitoso backtracking. – Matthias