我有一段代码,我试图在emacs中使用query-replace-regexp修改它。
fz.D(1,:) = Dcen;
fz.vol(1,:) = (4/3)*pi*((fz.D(1,:)/2).^3);
fz.POC(1,:) = Ac*fz.vol(1,:).^bc;
fz.w(1,:) = cw*fz.D(1,:).^eta;
% size - bin edges
fzl.D(1,:) = Dlim;
我希望它看起来如此:
fz.D(ind,:) = fz.D(1,:);
fz.vol(ind,:) = fz.vol(1,:);
fz.POC(ind,:) = fz.POC(ind,:);
等等。第四。
我尝试使用以下内容实现此更改,但似乎无法正常工作
查询替换-regexp的
\(*\)(1,:) = *; -> \1(k,:) = \1(1,:);
但这似乎什么都不做。
关于我应该如何解决此问题的任何建议?
答案 0 :(得分:2)
我不知道emacs,但你的正则表达式需要使用.*
来表示'匹配任何长度的子字符串'操作:
query-replace-regexp
\(.*\)\((1,:)\) = .*; -> \1(ind,:) = \1\2;
(这也使用了第二个\(\)
组,以避免重复替换文本中要重复的模式部分。
原因:
在正则表达式中,*
是一个后缀运算符,它匹配“0或更多前一项”。如果找不到上一个项目,则它与普通*
匹配。因此,您的表达式\(*\)(1,:) = *;
与确切的文字*(1,:) =
匹配,后跟0个或更多个空格,后跟;
。您希望使用.*
来“匹配任何内容”,因为这会匹配0个或更多.
项(其中.
匹配任何一个非行尾字符)。