Alla ricerca di un'espressione regolare che includa alfanumerico + & # 8220; & amp; & # 8221; e & # 8220 ;; & # 8221;
Domanda
Ecco il problema:
split=re.compile('\\W*')
Questa espressione regolare funziona bene quando ho a che fare con parole regolari, ma ci sono occasioni in cui ho bisogno che l'espressione includa parole come k & amp; amp; auml; ytt & amp; amp; auml; j & amp; aml; auml;
.
Cosa devo aggiungere al regex per includere i caratteri & amp;
e ;
?
Soluzione
Probabilmente vuoi invertire il problema, ovvero trovare tutto il personaggio senza gli spazi:
[^ \t\n]*
Oppure vuoi aggiungere i caratteri extra:
[a-zA-Z0-9&;]*
Nel caso in cui desideri abbinare entità HTML, dovresti provare qualcosa del tipo:
(\w+|&\w+;)*
Altri suggerimenti
Tratterei le entità come un'unità (poiché possono contenere anche codici di caratteri numerici), risultando nella seguente espressione regolare:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Questa corrispondenza
- un carattere di parola (incluso & # 8220;
_
& # 8221;) o - un'entità HTML composta da
- il carattere & # 8220;
& amp;
& # 8221 ;,- il carattere & # 8220;
#
& # 8221 ;,- il carattere & # 8220;
x
& # 8221; seguito da almeno una cifra esadecimale o - almeno una cifra decimale o
- il carattere & # 8220;
- almeno una lettera (= entità denominata),
- il carattere & # 8220;
- un punto e virgola
- il carattere & # 8220;
- almeno una volta.
/ EDIT: grazie a & # 932; & # 918; & # 937; & # 932; & # 918; & # 921; & # 927; & # 933; per aver segnalato un errore.
dovresti creare una classe di caratteri che includa i caratteri extra. Ad esempio:
split=re.compile('[\w&;]+')
Questo dovrebbe fare il trucco. Per tua informazione
-
\ w
(minuscola 'w') corrisponde a caratteri di parole (alfanumerici) -
\ W
(maiuscola) è una classe di caratteri negata (il che significa che corrisponde a qualsiasi carattere non alfanumerico) -
*
corrisponde a 0 o più volte e+
corrisponde a una o più volte, quindi*
corrisponderà a qualsiasi cosa (anche se non ci sono caratteri lì).
Sembra che questo abbia funzionato:
split = re.compile ( '(\\ W + & amp; \\ W +;) *')
Grazie per i suggerimenti. La maggior parte di loro ha funzionato bene su Reggy, ma non capisco bene perché abbiano fallito con re.compile.