Emacs Regexp仅替换组

时间:2014-01-28 16:05:23

标签: regex emacs

我在文件中有一些header字符串,我想用expected_status替换。 header显示为headersheader:。我只想用具有预期状态的冒号替换那些,所以:header: --> expected_status:

我使用replace-regexp使用以下命令:

Replace string (default \(header\):?$ -> expected_status):

但是,它没有正确更换。它也用expected_status替换冒号。有没有办法让emacs只对已识别的正则表达式组进行替换?

3 个答案:

答案 0 :(得分:2)

  

有没有办法让emacs只对已识别的正则表达式组进行替换?

不确定;但不是replace-regexp

(while (re-search-forward "\\(header\\):" nil t)
  (replace-match "expected_status" nil nil nil 1))

最后的1SUBEXP的{​​{1}}参数,指定要从匹配的正则表达式替换的组/子表达式。

所以,例如:

replace-match

答案 1 :(得分:1)

不容易忘记组并执行 M-x replace-regexp RET标头:RET expected_status:RET

或许我错过了你想要达到的目标。

并以通用方式回答您的问题:

要仅替换正则表达式组,请创建三个组:

\(the-stuff-before\)\(the-stuff-you-want-to_replace\)\(the-stuff-after\)

然后用

替换它
\1the-stuff-you-want\3

答案 2 :(得分:0)

否 - 但你能做什么标记你想要保留的部分,然后将其包含在替换表达式中。不确定您要匹配的确切正则表达式 - 但似乎是带有可选“:”的“标题”,并将其替换为“expected_status”。

保留可选的“:”将“header(:?)$”替换为“\ 1:expected_status”