我试图找到每个日期并在其周围加上引号。我想这应该是:emacs replace-regexp的语法
M-x replace-regexp 201\d-\d\d-\d\d <ret> '\&'
我也试过[0-9]
而不是\d
。
它不起作用。但使用isearch-forward-regexp
我可以键入[0-9][0-9]
并观看目标突出显示。我在做什么错在替换?
我试图找到每个日期并在其周围加上引号。我想这应该是:emacs replace-regexp的语法
M-x replace-regexp 201\d-\d\d-\d\d <ret> '\&'
我也试过[0-9]
而不是\d
。
它不起作用。但使用isearch-forward-regexp
我可以键入[0-9][0-9]
并观看目标突出显示。我在做什么错在替换?
Emacs正则表达式不具有\d
的简写[0-9]
。
我只是把文字2011-04-01到一个新的缓冲区,又回到了缓冲区的开始,和类型的Mxreplace-regexp
RET201[0-9]-[0-9][0-9]-[0-9][0-9]
RET'\&'
RET,以及日期为如预期般被单引号包围。
\d
在Emacs正则表达式语法中不受支持(C-h S regexp
有关于它们的文档)。您可以像您那样使用[0-9]
,或使用POSIX风格[[:digit:]]
。
但是,你所做的(与[0-9]
)应该工作,事实上只是为我工作。如果您在程序中使用正则表达式,则可能还会发现M-x regexp-builder
有用。
您可能需要逃避-s:
M-x replace-regexp <RET> 201[0-9]\-[0-9][0-9]\-[0-9][0-9] <RET> '\&'
给出的正则表达式过于包容性。以下也将匹配无效日期,如“2014-01-33”,但不是很多(假设YYYY-MM-DD排序):
“^ 20 [0-9] [0-9] - [ 0-1] [0-2] - [0-3] [0-9]“
或避免日期如”2014-11-33“(但不是像”2014-02-31“或“2014-00-00”),您可能会受到一些限制:
“^ 20 [0-9] [0-9] - [0-1] [0-2] - \([0- 2] [0-9] \ | 30 \ | 31 \)“
不知道我做错了什么,也许我下意识地在做M-%,今天我发现自己做了几次。 – Dov 2011-04-07 14:38:35