我想要做一个用正则表达式进行搜索和替换。
假设我有一个foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
,我想在列表中的每个项目周围加上引号。
我认为- 根据文档 - 这个正则表达式应该可以工作:(foo[1-4]\.txt) -> "\&"
。
但它不起作用。我做错了什么?
我想要做一个用正则表达式进行搜索和替换。
假设我有一个foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
,我想在列表中的每个项目周围加上引号。
我认为- 根据文档 - 这个正则表达式应该可以工作:(foo[1-4]\.txt) -> "\&"
。
但它不起作用。我做错了什么?
interactive:
M-x replace-regexp RET \(obj.method(.*)\{1\}\) RET trim$(\1)
programmatic:
(replace-regexp "\\(obj.method(.*)\\{1\\}\\)" "trim$(\\1)")
转义的括号是因为它们是分组,未转义的括号是字面上的括号。
你可能想查看Emacs Wiki正则表达式入门教程和Steve Yegge的Effective Emacs正则表达式部分。
Try something like this \(foo[1-4]\.txt\)
Emacs正则表达式总是让我困惑,因为它们不像Perl那样:
\(foo[1-4]\.txt\)
关于正则表达式,你已经得到了正确的答案,但在这种情况下,使用宏可能会更容易。将光标放在第一个名称的开头,然后键入:
C-x ( " M-f M-f " C-f C-f C-x )
也就是说,开始录制宏,插入引号,向前移动两个单词,插入引号,向前移动两个字符以获取下一个元素,然后停止录制宏。
然后使用C-x e
运行宏。要重复执行,只需再次按下e
即可。
(在Emacs 23中,您可以使用F3代替'C-x (
',使用F4代替'C-x )
'和'C-x e
'。)