首页 文章

Emacs:如何使用正则表达式替换字符串?

提问于
浏览
11

假设我在emacs中打开的文本文件(或dired缓冲区)中有以下内容:file_01.txt file_02.txt ... file_99.txt

我想查询 - 替换或替换文件到01_file.txt等 .

我想使用query-replace-regexp或replace-regexp,但不知道要放什么 . 搜索部分我放入“file_ ..”,但“..”被读作替换字符串中的句点 . 我开始学习regexp并且不知道如何做到这一点 . 请帮忙,谢谢 .

2 回答

  • 23

    我正在尝试重现此示例以用于学习目的 .

    我有 file_01.txt file_02.txt file ... 的缓冲区

    使用 re-builder 时,表达式 \(file\)_\([0-9]+\) 不起作用,但必须将转义加倍,例如 \\(file\\)_\\([0-9]+\\) .

    因为它涉及到悬而未决,我尝试了上面所写的内容,但无济于事 .

    以下命令

    M-x replace-regexp \(file\)_\([0-9]+\)\\(file\\)_\\([0-9]+\\)

    换成了

    \2_\1\\2_\\1

    始终导致 Replaced 0 occurences . 也就是说,无论圆括号前的 \ 是单倍还是加倍 .

    很明显,我在这里遗漏了一些明显的东西 . 你能解释一下吗?

    我正在使用GNU Emacs 24.3.1(x86_64-pc-linux-gnu,GTK版本3.10.7)

  • 1

    M-x replace-regexp 调用要用正则表达式替换的函数 .

    对于替换正则表达式输入: \(file\)_\([0-9]+\)

    这将创建两个组,一个匹配'file'部分,另一个匹配数字 . 大括号 \( ... \) 是稍后在替换字符串中使匹配可用的必要条件 .

    替换为输入: \2_\1

    这将插入搜索字符串(数字部分)中的第二个匹配项,添加_(下划线),然后添加搜索字符串中的第一个匹配项(“文件”) .

    有关Emacs正则表达式的更多信息,请参阅Regexp SyntaxRegexp Replace .

    一旦掌握了regexp基础知识,您可能需要查看带有 M-x re-builder 的Emacs ReBuilder工具,它允许您以交互方式构建正则表达式 .

相关问题