Infatti, Python 3.4 supporta solo u'...'
(per sostenere il codice che deve funzionare sia su Python 2 e 3) e r'....'
, ma non entrambi. Questo perché la semantica di come funziona ur'..'
in Python 2 è diversa da come funziona ur'..'
in Python 3 (in Python 2, gli escape ancora vengono elaborati, in Python 3 una stringa `r '...' non lo farebbe).
Si noti che nel questo caso specifico non c'è differenza tra il valore letterale stringa stringa e il valore normale! Si può semplicemente utilizzare:
_eng_word = u"[a-zA-Z][a-zA-Z0-9'.]*"
e funzionerà sia in Python 2 e 3.
Per i casi in cui una stringa letterale grezzo ha importanza, si potrebbe decodificare la stringa prima da raw_unicode_escape
su Python 2, di prendere il AttributeError
su Python 3:
_eng_word = r"[a-zA-Z][a-zA-Z0-9'.]*"
try:
# Python 2
_eng_word = _eng_word.decode('raw_unicode_escape')
except AttributeError:
# Python 3
pass
Se si sta scrivendo codice Python 3 solo(in modo che non ha bisogno di essere eseguito su Python 2 più), Basta inserire i u
tutto:
_eng_word = r"[a-zA-Z][a-zA-Z0-9'.]*"
fonte
2014-09-26 16:17:37
Volevate farlo funzionare su * entrambi Python 2 e 3 *? O solo su Python 3? –
Grazie per la rapida risposta! Ho solo bisogno che funzioni su python 3. –