Замена Vim Regex

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

Я пытаюсь выполнить поиск/замену в Vim, который заменит ряд чисел, начинающийся с 103, и за ним следуют четыре цифры до 123, за которыми следуют те же четыре цифры:

10333031233303
10332131233213

Самое близкое, что я пришел, это:

%s/103\d\{4}/123\0/g

Однако это приводит к тому, что все число соответствует \0, как таковое:

10333031231033303

Большое спасибо за любую помощь

Ответы

Ответ 1

Вы очень близки

%s/103\(\d\{4}\)/123\1/g

Шаблон между \( и \) - это соответствие, которое может быть доступно в \1, \2 и т.д. в порядке появления. Подробнее см. :help \(.

Ответ 2

Теперь без группы захвата!

:%s/103\ze\d\{4}/123/g

\ze установит конец матча там. Это позволяет вам сопоставить весь шаблон, но только сделать замену на его части.

:h /\ze
:h /\zs

Ответ 3

Используйте группу захвата:

%s/103\(\d\{4}\)/123\1/g

Ответ 4

Попробуйте следующее:

%s#103\(\d\{4}\)#123\1#g