2014-09-13 23 views
6

Próbuję usunąć wszystkie znaki interpunkcyjne z ciągiem przy użyciuElixir wymiana interpunkcyjny regex

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

Jednak to nie jest usunięcie wszystkich znaków interpunkcyjnych! Jako przykładowy przykład:

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

Czego powinienem użyć?

Odpowiedz

14

ewentualnie potrzebne / ... / jako wzór delimiters:

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

Rezultatem może być wyjaśnione, bo inaczej [] byłyby wykorzystywane jako ograniczniki w próbce, która odpowiada \p{P}\p{S} jako sekwencja i wyników w foo!? (patrz regex101 example)

Czy dodatkowo dodać +quantifier: ~r/[\p{P}\p{S}]+/

+0

Masz dokładnie rację! Dziękuję Ci. –

+0

@JoshuaHannah nie ma za co :) –

+0

To wyrażenie usunie również hipensy, takie jak "spółdzielnia". @ Jonny5 czy jesteś w stanie zaktualizować swój reg ex, aby nie usuwać łączników? – BenMorganIO