2012-11-07 5 views
7

Ho bisogno delle soluzioni per this question, ad eccezione di Python! Ho provato a installare la libreria regex per Python, as apparently che abilita l'uso delle espressioni POSIX nelle espressioni regex di Python, ma suppongo che non includa i caratteri Unicode nella classe [:alpha:]. Ad esempio:Come abbinare i caratteri accentati con una regex in Python?

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0) 
'Please work bl' 

quando lo voglio per abbinare Please work blåbær and NOW stop

EDIT: Sto usando Python 2.7

EDIT 2: Ho provato quanto segue:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0) 
'Please work bl\xc3' 

Non proprio quello che volevo (voglio abbinare la parte dopo il primo carattere non ASCII), b o almeno si è adattato al personaggio più di prima. Cosa dovrei fare qui per farlo corrispondere al resto di ciò che voglio?

MODIFICA 3: Non voglio corrispondere a nessun carattere di "parola"; per "parola" intendo a-z, A-Z, spazio e qualsiasi variazione accentata di caratteri di parole. Spero di aver capito la mia idea; in una frase come

lets match força, but stop before that comma 

voglio abbinare solo lets match força

EDIT 4: così ho cercato di usare Python 3 solo per questo uno script:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0) 
'lets match força' 

immagino che funziona per la maggior parte in Python 3, tranne per il fatto che combina anche i numeri (che io sicuramente non voglio) e i trattini bassi. Un modo per risolvere questo problema, in Python 2 o 3?

risposta

2

Non è chiaro quale versione di Python si sta utilizzando. se usi 2.x, allora potresti avere un problema Unicode. vedi questo post per ulteriori suggerimenti e sentiti libero di aggiornare la tua domanda per ulteriori dettagli.

Im abbastanza surprissed, che non posso convertire il carattere accentato alla corretta rappresentazione Unicode ...

ma ci sono soluzione alternativa:

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 

o

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)