Вы можете определить список исключений, используя некую вещь с отрицательным обзором, но я думаю, что проще всего было бы просто использовать \w
вместо \W
и отвергнуть всю группу:
word.gsub!(/[^\wÄäÖöÜü]/, '')
Вы также можете использовать word.gsub(/[^\p{Letter}]/, '')
, который должен избавиться от любых символов, не перечисленных в юникоде как «Буква».
Вы упомянули немецкие гласные в своем вопросе, я думаю, это стоитотмечая здесь, что немецкий алфавит также включает в себя длинные s: ẞ / ß
Обновление:
Чтобы ответить на исходный вопрос, чтобы определить список исключений, вы используете «отрицательный взгляд-позади "(?<!pat)
:
word.gsub(/\W(?<![ÄäÖöÅåẞß])/, '')