emacs中的正则表达式将.x之类的所有数字更改为0.x.

时间:2014-02-08 06:04:02

标签: regex emacs

我是emacs的新手,我正在学习emacs!

我有一个文本文件,其中包含许多随机方式的浮点数。

某些数字的存储方式与0.9, 0.184 0.56等相同。有些数字的存储方式与.9, .184, .56等相同。

我想在emacs 中使用正则表达式将所有 .xxxx 数字转换为 0.xxxx我该怎么办?实现这个目标?

浮点后的最大位数为4(如果重要)

非常感谢!

2 个答案:

答案 0 :(得分:1)

一种简单的方法就是使用内置的query-replace-regexp功能( C-M - %)。像下面这样的东西应该让你开始。

查询替换正则表达式:\([^0-9]\)\(\.[0-9]+\)
查询将regexp \([^ 0-9] \)\(\。[0-9] + \)替换为:\10\2

答案 1 :(得分:1)

这可能不一定比@nullptr的答案更好(至少对于这个特定的例子),但你也可以使用以下正则表达式query-replace-regexp绑定到 CM - %

\(^\|[^0-9]+\)\.\([[:digit:]]+\)

以上正则表达式使用character classes[:digit:]匹配任何数字。然后你可以用

替换它
\10.\2

您可能已经注意到正则表达式的emacs语法与您在其他语言中可能熟悉的正则表达式语法略有不同,例如。 (|需要在emacs regexp中进行转义。您可能会发现以下内容对于了解emacs regexp

非常有用

1)您可以通过query-replace-regexp

阅读C-h f query-replace-regexp RET的文档

2)This emacswiki page对emacs regexp语法有一个很好的总结。

3)elisp manual对正则表达式语法有更深入的解释。

您可以使用几个软件包来了解emacs regexp

1)Vanilla emacs附带re-builder,执行M-x re-builder这将在底部打开一个小窗口,您可以在其中输入正则表达式,它将突出显示缓冲区中的正则表达式匹配。

2)我个人觉得软件包visual-regexp.ellink)在使用emacs regexp时非常有用,它基本上可以让你在进行regexp时对regexp匹配(包括组匹配)进行“实时反馈”取代。以下是一些屏幕截图,演示了如何使用包

提供的命令vr/query-replace

enter image description here

然后在更换正则表达式时,它会显示哪些部分将由什么

替换

enter image description here