无法在emacs中获取特定的query-replace-regexp

时间:2016-09-05 22:13:32

标签: regex replace emacs

我有一段代码,我试图在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,:);

但这似乎什么都不做。

关于我应该如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:2)

我不知道emacs,但你的正则表达式需要使用.*来表示'匹配任何长度的子字符串'操作:

  

query-replace-regexp \(.*\)\((1,:)\) = .*; -> \1(ind,:) = \1\2;

(这也使用了第二个\(\)组,以避免重复替换文本中要重复的模式部分。

原因:

在正则表达式中,*是一个后缀运算符,它匹配“0或更多前一项”。如果找不到上一个项目,则它与普通*匹配。因此,您的表达式\(*\)(1,:) = *;与确切的文字*(1,:) =匹配,后跟0个或更多个空格,后跟;。您希望使用.*来“匹配任何内容”,因为这会匹配0个或更多.项(其中.匹配任何一个非行尾字符)。