Как удалить из текста все несловарные символы, кроме ä, ö и ü, используя RegExp - PullRequest
3 голосов
/ 08 октября 2019

У меня есть файл, и я хочу удалить из него все несловарные символы, за исключением ä, ö и ü, которые являются мутировавшими гласными в немецком языке. Есть ли способ сделать word.gsub!(/\W/, '') и добавить в него исключения?

Пример:

text = "übung bzw. äffchen"
text.gsub!(/\W/, '').

Теперь он вернет "bungbzwffchen". Он удаляет несловесные символы, но также удаляет измененные гласные ü и ä, которые я хочу сохранить.

Ответы [ 2 ]

4 голосов
/ 08 октября 2019

Вы можете определить список исключений, используя некую вещь с отрицательным обзором, но я думаю, что проще всего было бы просто использовать \w вместо \W и отвергнуть всю группу:

word.gsub!(/[^\wÄäÖöÜü]/, '') 

Вы также можете использовать word.gsub(/[^\p{Letter}]/, ''), который должен избавиться от любых символов, не перечисленных в юникоде как «Буква».

Вы упомянули немецкие гласные в своем вопросе, я думаю, это стоитотмечая здесь, что немецкий алфавит также включает в себя длинные s: ẞ / ß

Обновление:

Чтобы ответить на исходный вопрос, чтобы определить список исключений, вы используете «отрицательный взгляд-позади "(?<!pat):

word.gsub(/\W(?<![ÄäÖöÅåẞß])/, '')
0 голосов
/ 08 октября 2019

Вы можете использовать оператор && в классе символов:

text = "übung bzw. äffchen  ÄÖÜ"

text.gsub(/[\W&&[^äÄöÖüÜ]]/, '')
  #=> "übungbzwäffchenÄÖÜ"

Регулярное выражение гласит: «соответствует символу в наборе символов, образованном путем пересечения набора всех несловарных символовс набором всех символов, кроме символов в строке "äÄöÖüÜ". См. Regexp (поиск "&& operator").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...