2012-04-03 12 views
8

Sto cercando l'equivalente di [\w]&&[^\d] (Ovviamente & & non è un operatore di espressioni regolari). L'espressione regolare deve corrispondere SOLO a parole costituite da caratteri "alfabetici" UTF8. Qualcuno ha qualche idea?Quale regex di Python corrisponde a tutti i caratteri dell'alfabeto ma non ai numeri? [unicode aware]

+3

NON eseguire MAI regex sul testo codificato. –

+3

http://stackoverflow.com/questions/8923949/matching-only-a-unicode-letter-in-python-re – warvariuc

+1

Stai parlando dell'alfabeto inglese? Quindi le risposte [a-zA-Z] di seguito saranno sufficienti. Altrimenti sei pronto per un trattamento ... –

risposta

9

regex supporta le proprietà Unicode, il che significa che è possibile utilizzare \p{L} con esso.

-5

Utilizzare [a-zA-Z] per abbinare tutti i caratteri dell'alfabeto.

+0

errato. Questo mancherà "あ". –

+0

Questo non è un carattere alfabetico. –

+9

Sì, lo è. Non è solo un personaggio dell'alfabeto inglese. –

0

Non sono sicuro della regex, ma per unicode si potrebbe essere in grado di utilizzare il modulo uncodedata; in particolare la funzione unicodedata.category()

0

AFAICT, non esiste un'espressione regolare che corrisponda a tutte le lettere ma non alle cifre o ai caratteri di sottolineatura.

Potreste usare \w e quindi controllare per vedere se le partite sono lettere utilizzando le proprietà dei punti di codice:

def isletter(c): 
    return unicodedata.category(c).startswith('L') 
1

Come Ignacio sottolineato [a-zA-Z] non corrisponde a caratteri Unicode, e non c'è classe di caratteri predefiniti per tutti i caratteri Unicode, si consiglia di usare qualcosa di simile a quanto segue, che sarebbe semplice e lineare

re.findall("(["+string.letters+"])+",st) 

si prega di notare, string.letters dipende dal locale e se non si wa nt per cambiare il locale, che puoi fare fuori rotta con locale.setlocale(locale.LC_CTYPE, code), questo dovrebbe funzionare come un gioco da ragazzi.

Problemi correlati