我想用每行开头从 1 开始的递增索引的字符串替换每个子匹配,以便替换字符串为varargin{1}
, varargin{2}
,varargin{3}
等。对于更大的数字,数字字符串自然需要多个字符, eg: 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});