Позитивное утверждение и замена с Vim? - PullRequest
12 голосов
/ 17 ноября 2011

Я хотел бы использовать Vim для сопоставления регулярного выражения и выполнения подстановки.У меня есть файл TSV со строками, которые выглядят следующим образом:

rs11223-A        -A
rs23300-G        -TTA
rs9733-T          -G
rs11900000-GT    -TTG

Я хочу заменить символ тире (-) для вкладки только в первом столбце после rs ...

В Vim я пытался выполнить замену, используя:

:%s/(?<=^rs[0-9]{1,12})-/\t/g   

Может кто-нибудь указать, в чем заключается моя проблема и правильное решение?

Ответы [ 4 ]

21 голосов
/ 17 ноября 2011

Это может зависеть от конфигурации, но в моем окружении мне нужно добавить { , } к \.

Кроме того, Vim имеет \zs и \ze для начала и окончания сопоставления, поэтомувам обычно не приходится иметь дело с обычным регулярным выражением.

Это делает то, что вы хотите:

:%s/^rs\d\{1,12}\zs-/\t/g
8 голосов
/ 17 ноября 2011

Позитивный взгляд выполняется с помощью:

\@<=

Так что вы можете использовать что-то вроде:

:%s/\d\@<=-/\t/g

Ваши фактические данные могут быть более сложными, но с тем, что вы опубликовали, вы также можете просто согласиться:

:%s/-/\t

Если rs должно быть в начале строки, вы можете использовать \zs, чтобы указать начало матча и использовать привязку (^):

:%s/^rs\d*\zs-/\t
0 голосов
/ 18 октября 2018

Правильное выражение для использования lookbehind:

%s/\(\d\+\)\@<=-/\t/gc 

\(\d\+\)\@<= означает положительный взгляд в поисках цифр (\d\+ означает поиск хотя бы одной цифры). Согласно здесь , мы должны захватить \d\+, прежде чем применять положительный взгляд позади, следовательно, \(\) вокруг \d\+.

Кроме того, чтобы использовать обычный квантификатор регулярного выражения +, мы должны экранировать его в vim (\+), см. документ здесь .

0 голосов
/ 17 ноября 2011

Вы хотите следующее:

%s/^\(rs[0-9]\{1,12\}\)-/\1\t/g

Для регулярных выражений Vim требуются специальные escape-последовательности для {, }, ( и ).

Кроме того, в разделе подстановки вам нужно \1, чтобы вставить соответствующую строку.

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