我正在尝试找到每个日期并在其周围加上引号。我认为这应该是:
M-x replace-regexp 201\d-\d\d-\d\d <ret> '\&'
我还尝试了[0-9]
而不是\d
。
它不起作用。但是使用isearch-forward-regexp
我可以输入[0-9][0-9]
并观看目标突出显示。我在替换时做错了什么?
答案 0 :(得分:9)
Emacs regexp没有\d
的通用[0-9]
简写。
我只是将文本2011-04-01放入新缓冲区,返回缓冲区的开头,然后输入 Mx replace-regexp
RET 201[0-9]-[0-9][0-9]-[0-9][0-9]
RET '\&'
RET ,日期被单引号包围,正如预期的那样。
答案 1 :(得分:5)
\d
(C-h S regexp
有关于它们的文档)。您可以像使用[0-9]
一样使用,或使用POSIX样式[[:digit:]]
。
然而,你所做的(使用[0-9]
)应该有效,并且实际上只是为我工作。如果您在程序中使用正则表达式,则可能会发现M-x regexp-builder
有用。
答案 2 :(得分:0)
您可能需要转义-s:
M-x replace-regexp <RET> 201[0-9]\-[0-9][0-9]\-[0-9][0-9] <RET> '\&'
答案 3 :(得分:0)
给出的正则表达式过于包容。以下内容也将与无效日期相匹配,例如&#34; 2014-01-33&#34;,但不是很多(假设YYYY-MM-DD排序):
&#34; ^ 20 [0-9] [0-9] - [0-1] [0-2] - [0-3] [0-9]&#34;
或者,以避免类似&#34; 2014-11-33&#34; (但不喜欢&#34; 2014-02-31&#34;或&#34; 2014-00-00&#34;),你可能会稍微限制一些:
&#34; ^ 20 [0-9] [0-9] - [0-1] [0-2] - \([0-2] [0-9] \ | 30 \ | 31 \ )&#34;