Sto tentando di utilizzare il modulo re
in Python 2.7.3 con testo Devnagari codificato in Unicode. Ho aggiunto from __future__ import unicode_literals
all'inizio del mio codice in modo che tutti i valori letterali delle stringhe siano oggetti unicode.Corrispondenza di espressioni regolari di unicode Python in mancanza di alcuni caratteri Unicode -bug o errore?
Tuttavia, sto riscontrando alcuni strani problemi con la corrispondenza regex di Python. Ad esempio, considera questo nome: "किशोरी". Questo è un nome (errato), in hindi, inserito da uno dei miei utenti. Qualsiasi lettore hindi lo riconoscerebbe come una parola.
Di seguito restituisce una partita, come si deve:
re.search("^[\w\s][\w\s]*","किशोरी",re.UNICODE)
ma questo non significa:
re.search("^[\w\s][\w\s]*$","किशोरी",re.UNICODE)
Alcuni speleologia ha rivelato che solo un personaggio in questa stringa, carattere 0915 (क), viene riconosciuto come rientrante nella classe di caratteri \ w. Questo non è corretto, poiché il database dei caratteri Unicode file on "derived core properties" elenca gli altri caratteri (non li ho controllati tutti) in questa stringa come alfabetici, come in effetti lo sono.
Questo è solo un bug nell'implementazione di Python? Potrei aggirare questo definendo manualmente tutti i caratteri alfanumerici Devnagari come un intervallo di caratteri, ma sarebbe doloroso. O sto facendo qualcosa di sbagliato?
Sì, posso confermare che il modulo regex funziona. La classe di caratteri [[:: alnum:]] POSIX funziona anche con il modulo regex. – ShankarG
@ShankarG: 'perl' è d'accordo:' echo किशोरी | perl -CS -ne'print se/^ \ w + $/''(presume utf-8 io). – jfs
Cambiato il mio segno "accettato" in questa risposta, poiché questa è in effetti la risposta corretta - è effettivamente un bug nel modulo re. – ShankarG