2014-09-13 7 views
6

Sto cercando di rimuovere tutti i segni di punteggiatura da una stringa utilizzandoElixir sostituzione punteggiatura regex

String.replace(sentence, ~r[\p{P}\p{S}], "") 

Tuttavia non è la rimozione di tutta la punteggiatura! Come esempio illustrativo:

iex(1)> String.replace("foo!&^%$?", ~r[\p{P}\p{S}], "") 
"foo!?" 

Che cosa dovrei usare?

risposta

14

eventualmente necessario / ... / come modello delimiters:

String.replace("foo!&^%$?", ~r/[\p{P}\p{S}]/, "") 

Il risultato potrebbe essere spiegato, perché altrimenti [] verrebbe utilizzato come delimitatori nel campione, che corrisponde ad \p{P}\p{S} come una sequenza e risultati in foo!? (vedi regex101 example)

Sarebbe inoltre aggiungere un +quantifier: ~r/[\p{P}\p{S}]+/

+0

Hai esattamente ragione! Grazie. –

+0

@JoshuaHannah siete i benvenuti :) –

+0

Questa espressione regolare rimuoverà anche gli hypens come "cooperativo". @ Jonny5 sei in grado di aggiornare il tuo reg ex per non rimuovere i trattini? – BenMorganIO