python version 3.4 unterstützt kein 'ur' - Präfix
Ich habe einige python-code geschrieben in einer älteren version von python(2.x) und ich kämpfen, um es Arbeit. Ich bin mit python 3.4
_eng_word = ur"[a-zA-Z][a-zA-Z0-9'.]*"
(es ist ein Teil von einem tokenizer)
- Haben Sie wollen, um diese Arbeit zu machen, die auf beiden Python 2 und 3? Oder nur auf Python 3?
- Danke für die schnelle Antwort! Ich brauche nur bei der Arbeit mit python 3.
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://bugs.python.org/issue15096
Titel: Drop-Unterstützung für das "ur" string prefix
Wenn PEP 414 wiederhergestellt Unterstützung für die expliziten Unicode-Literale in Python 3, die "ur" string prefix wurde als synonym für die "r" - Präfix.
Also verwenden Sie 'r' statt 'ur'
ur'...'
raw-string-Literale konnte nicht reproduziert werden.In der Tat, Python 3.4 unterstützt nur
u'...'
(zur Unterstützung der code, der ausgeführt werden muss, auf beiden Python 2 und 3) undr'....'
, aber nicht beide. Das ist, weil die Semantik, wieur'..'
funktioniert in Python 2 sind anders aus, wieur'..'
wäre in Python 3 (Python-2,\uhhhh
und\Uhhhhhhhh
entweicht noch verarbeitet werden, in Python 3 ein `r',...' string nicht).Beachten Sie, dass in diesem speziellen Fall es gibt keinen Unterschied zwischen den raw-string-Literale und die regelmäßigen! Sie können nur verwenden:
und es wird funktionieren sowohl in Python 2 und 3.
Fällen, in denen ein raw-string-Literale nicht egal, Sie konnte decodieren die raw-string aus
raw_unicode_escape
auf Python 2, fangen dieAttributeError
auf Python 3:Wenn Sie schreiben Python-3-code nur (damit es nicht zu laufen, auf Python 2 mehr), legen Sie einfach das
u
ganz:raw_unicode_string
Codierung Idee, aber Ihr code wird zu unterschiedlichen Ergebnissen führen, zwischen Python 2 und Python 3.unicode_escape
:_eng_word = '[a-zA-Z][a-zA-Z0-9'.]*'; _eng_word.replace(r'\\', r'\\\\').decode('unicode_escape')
dies ist der Ansatz, dasssix
verwendet.\uhhhh
Muster haben eine Bedeutung, die inre
auch. Also selbst wenn in Python 3, Sie am Ende mit\\uhhhh
(geflohen) Unicode-Sequenzen, Sie haben immer noch die gleiche Bedeutung im regulären Ausdruck, als hätten Sie bestanden im wahrsten Unicode-codepoint.Diese Tabelle vergleicht einige der verschiedenen string-literal Präfixe in Python 2(.7) und 3(.4+):
Wie Sie sehen können, in Python 3 gibt es keine Möglichkeit, eine wörtliche, die nicht Prozess entweicht, sondern Prozess-unicode-Literale. Zu bekommen, wie ein string mit code, der funktioniert in Python 2 und 3, Verwendung:
Eigentlich, dein Beispiel ist nicht sehr gut, da es keine unicode-Literale oder escape-Sequenzen. Ein besseres Beispiel wäre:
In python 2:
In Python 3:
Das ist wirklich die gleiche Sache.