Позитивное утверждение и замещение Vim?
Я хотел бы использовать Vim для соответствия регулярному выражению и выполнить подстановку. У меня есть файл tsv с строками, которые выглядят так:
rs11223-A -A
rs23300-G -TTA
rs9733-T -G
rs11900000-GT -TTG
Я хочу заменить символ тире (-) для вкладки только в первом столбце после rs...
В Vim я пытался выполнить подстановку, используя:
:%s/(?<=^rs[0-9]{1,12})-/\t/g
Может ли кто-нибудь указать, что моя проблема, и правильное решение?
Ответы
Ответ 1
Это может зависеть от конфигурации, но в моей среде мне нужно добавить { , }
с помощью \
.
Кроме того, Vim имеет \zs
и \ze
, чтобы начинать и заканчивать совпадение, поэтому вам обычно не приходится иметь дело с обычным обратным просмотром регулярных выражений.
Это делает то, что вы хотите:
:%s/^rs\d\{1,12}\zs-/\t/g
Ответ 2
Положительный внешний вид выполняется с помощью:
\@<=
Итак, вы можете использовать что-то вроде:
:%s/\d\@<=-/\t/g
Ваши фактические данные могут быть более сложными, но с тем, что вы опубликовали, вы также можете просто решить:
:%s/-/\t
Если rs
должно быть в начале строки, вы можете использовать \zs
, чтобы указать начало матча и использовать привязку (^
):
:%s/^rs\d*\zs-/\t
Ответ 3
Вы хотите следующее:
%s/^\(rs[0-9]\{1,12\}\)-/\1\t/g
Регулярные выражения Vim требуют некоторых специальных управляющих последовательностей для {
, }
, (
и )
.
Кроме того, в разделе подстановки вам понадобится \1
, чтобы вставить соответствующую строку.