Преобразование пробелов во вкладки в RegEx - PullRequest
5 голосов
/ 06 декабря 2009

Как вы говорите следующее в регулярном выражении:

foreach line
   look at the beginning of the string and convert every group of 3 spaces to a tab
   Stop once a character other than a space is found

Вот что у меня есть:

/^ +/\t/g

Однако, это преобразует каждый пробел в 1 вкладку

Любая помощь будет оценена.

Ответы [ 3 ]

7 голосов
/ 06 декабря 2009

с Perl:

perl -pe '1 while s/\G {3}/\t/gc' input.txt >output.txt

Например, со следующим вводом

nada
   three spaces
    four spaces
   three   in the middle
      six space

вывод (табуляция заменена на \t) равна

$ perl -pe '1 while s/\G {3}/\t/gc' input | perl -pe 's/\t/\\t/g'
nada
\tthree spaces
\t four spaces
\tthree   in the middle
\t\tsix spaces
3 голосов
/ 10 апреля 2012

Я знаю, что это старый вопрос, но я подумал, что дам полный ответ регулярного выражения, который работает (ну, у меня это сработало).

s/\t* {3}/\t/g

Обычно я использую это для преобразования целого документа в vim. Для этого в vim это выглядит так:

:%s/\t* \{3\}/\t/g

Надеюсь, это кому-то еще поможет.

0 голосов
/ 06 декабря 2009

Вы, вероятно, хотите /^(?: {3})*/\t/g

редактировать: исправлено

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