Vim: заменить все не буквы, не цифры и не '-' символ из строки - PullRequest
0 голосов
/ 01 сентября 2018

Я недавно начал использовать vim и потратил некоторые попытки, чтобы решить эту проблему. Итак, у меня есть строка, например "I'm 20 years old - and you?" Мне нужно получить от этого 'I_m_20_years_old_-_and_you_'

В Java это выглядит довольно просто, как этот [^a-Z0-9\-]+, но я не могу заставить работать подобное регулярное выражение в Vim Я пробовал :26s/\(\W\)/_/g, но он также удаляет все '-'. Как добавить в регулярное выражение "а не -"?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Побег - и +:

:s/[^a-zA-Z0-9\-]\+/_/g
0 голосов
/ 01 сентября 2018

Проблема с вашей попыткой :26s/[^a-Z0-9-]+/_/g - a-Z, что является недопустимым диапазоном. Это должно быть a-zA-Z.

(A-z будет «работать», но если вы посмотрите на таблицу ASCII , она также включает [\]^_`, а не только буквы.)

Следующая проблема заключается в том, что + не является метасимволом регулярных выражений в vim (по крайней мере, не по умолчанию). [^a-zA-Z0-9-]+ будет искать не буквенно-цифровой не - символ, за которым следует литерал +. Вместо него должно быть \+.

Это дает нам s/[^a-zA-Z0-9-]\+/_/g, который работает.

0 голосов
/ 01 сентября 2018

Согласно http://vimregex.com/ должно быть так

s/[^a-zA-Z0-9-]\+/_/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...