двойные кавычки строк внутри скобки - PullRequest
2 голосов
/ 02 мая 2009

У меня есть строка, как показано ниже.

полное имя = (это имя теста);

Я хочу заключить в кавычки все строки внутри "(" и ")".

т.е. полное имя = ("this" "is" "a" "test" "name");

Может кто-нибудь дать мне регулярное выражение для этого?

Ответы [ 3 ]

4 голосов
/ 02 мая 2009

Я бы сделал это следующим образом:

:s/\<\w\+\>/"&"/gc

В связи с переключателем подтверждения 'c' вам будет предложено ввести каждую замену. Ответьте 'n' (нет) для замены 'fullname' и 'a' (all) для остальной части строки.

3 голосов
/ 02 мая 2009

Это делает это:

:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g

Имейте в виду, что сопоставление вложенных шаблонов (например, в скобках) с регулярным выражением пойдет не так, если ввод будет неверным. Вышеприведенное не обрабатывает вложенные скобки вообще, а заключенные в кавычки или экранированные скобки также разбивают его. Обращаться с осторожностью.

гласит:

:%s               substitute on all lines
/                 matching
\v                (with "very magic" switched on)
(\(.*)@<=         a position that follows an opening paren, on this line
[[:alnum:]]+      a series of alphanumeric characters (i.e. "words")
(.*\))@=          that are followed by a closing paren, on this line
/                 replace with
"&"               the match, in quotes
/g                globally

Примечательно, что vim действительно поддерживает просмотр переменной длины. Большинство современных реализаций регулярных выражений этого не делают.

0 голосов
/ 02 мая 2009

Эта команда помещает в кавычки все, что не является пробелом, табуляцией, знаком равенства, паренем или точкой с запятой:

:s/[^ \t=();][^ \t=();]*/"&"/g

Обратите внимание, что это также цитаты fullname, но вы можете удалить эти цитаты вручную.

Иногда стоит выполнить часть работы вручную, потому что ее автоматизация будет медленнее.

Запустите команду:

:help substi

чтобы получить помощь по подстановке регулярных выражений в vim.

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