gpt4 book ai didi

regex - 如何在 Vim 中用每行开头从 1 开始的连续数字替换子匹配

转载 作者:行者123 更新时间:2023-12-01 18:17:01 24 4
gpt4 key购买 nike

我想将每个子匹配替换为一个字符串,该字符串的索引从每行开头的 1 开始递增,因此替换字符串将为 varargin{1}, varargin{ 2}varargin{3}等。对于更大的数字,数字字符串自然需要多个字符,例如:varargin{9}varargin{10}等。输入数据为MATLAB代码;下面给出了示例输入和期望的输出。我主要是在寻找 Vim 解决方案,但也欢迎其他方法来实现此目的。

下面的正则表达式创建从 1 开始的运行索引,但这些索引会随着每一行而变化:

:let @a=1 | %s/\v.*'\zs.*\ze\);/\=substitute(submatch(0), '\s[a-zA-Z0-9{}_.]*', ' varargin{'.(@a+setreg('a',@a+1)).'}', 'g')/g

我的问题是:

如何在每行开头将索引重置为 1,并在每个子匹配之间将索引增加 1?

上面的代码是 http://vim.wikia.com/wiki/Substitute_with_incrementing_numbers 中提供的“以升序替换”示例的修改版本:

:let @a=1 | %s/abc/\='xyz_'.(@a+setreg('a',@a+1))/g

输入示例#1:

messages.msg1.English = xprintf('analysis directory is on %s\n', analysis_dir);

例如输入#1所需的输出:

messages.msg1.English = xprintf('analysis directory is on %s\n', varargin{1});

输入示例#2:

messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s', handling_struct.n_of_accepted, handling_struct.accepted_sessions_vector);

例如输入#2所需的输出:

messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s', varargin{1}, varargin{2});

输入示例#3:

messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs', give_file_struct.regex, number_of_dirs);

例如输入#3所需的输出:

messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs', varargin{1}, varargin{2});

最佳答案

在这种情况下我将使用以下命令:

:g/^/let n=[0] | s/abc/\='xyz_'.map(n,'v:val+1')[0]/g

另请参阅my answer对于问题“How to replace CSV column separators with numbered labels in Vim? ”。

关于regex - 如何在 Vim 中用每行开头从 1 开始的连续数字替换子匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com