Alla ricerca di un'espressione regolare che includa alfanumerico + & # 8220; & amp; & # 8221; e & # 8220 ;; & # 8221;

StackOverflow https://stackoverflow.com/questions/152218

  •  02-07-2019
  •  | 
  •  

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 ; ?

È stato utile?

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
      • almeno una lettera (= entità denominata),
    • un punto e virgola
  • 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top