我是emacs的新手,我正在学习emacs!
我有一个文本文件,其中包含许多随机方式的浮点数。
某些数字的存储方式与0.9, 0.184 0.56
等相同。有些数字的存储方式与.9, .184, .56
等相同。
我想在emacs 中使用正则表达式将所有 .xxxx
数字转换为 0.xxxx
我该怎么办?实现这个目标?
浮点后的最大位数为4(如果重要)
非常感谢!
答案 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.el
(link)在使用emacs regexp时非常有用,它基本上可以让你在进行regexp时对regexp匹配(包括组匹配)进行“实时反馈”取代。以下是一些屏幕截图,演示了如何使用包
vr/query-replace
然后在更换正则表达式时,它会显示哪些部分将由什么
替换