27

我想在 Emacs 中创建一个匹配 3 位数字的正则表达式。例如,我想匹配以下内容:

123
345
789

但不是

1234
12
12 23

如果我使用[0-9]+我匹配任何单个数字字符串。我认为[0-9]{3}会起作用,但是在重新构建器中进行测试时,它不匹配任何东西。

4

7 回答 7

49

如果您以交互方式输入正则表达式,并且想要使用{3},则需要使用反斜杠来转义花括号。如果您不想匹配较长数字字符串的任何部分,请使用\b匹配数字周围的单词边界。这留下:

\b[0-9]\{3\}\b

对于那些想要更多信息的人\b,请参阅文档

匹配空字符串,但仅在单词的开头或结尾。因此,\bfoo\b 将任何出现的 匹配foo为单独的单词。 \bballs?\b匹配ballballs作为单独的词。 \b匹配缓冲区的开头或结尾,而不管它旁边出现什么文本。

如果您确实想在 elisp 代码中使用此正则表达式,一如既往,您必须再次转义反斜杠。例如:

(highlight-regexp "\\b[0-9]\\{3\\}\\b")
于 2008-09-16T05:33:38.347 回答
10

[0-9][0-9][0-9][0-9]{3}或者\d{3}不工作,因为它们也匹配“1234”。

所以这取决于分隔符是什么。

如果它在变量中,那么您可以执行^/[0-9]{3}/$. 如果它由空格分隔,你可以这样做\w+[0-9]{3}\w+

于 2008-09-16T05:35:40.307 回答
4

你应该使用这个:

"^\d{3}$"
于 2008-09-16T05:41:41.447 回答
3

正如其他人指出的那样,您需要匹配的不仅仅是三个数字。在数字之前,您必须有一个 line-start 或不是数字的东西。如果 emacs 支持 \D,请使用它。否则使用集合 [^0-9]。

简而言之:

(^|\D)\d{3}(\D|$)
于 2008-09-16T05:44:50.613 回答
2

在 Emacs 中试验正则表达式时,我发现regex-tool非常有用:

ftp://ftp.newartisans.com/pub/emacs/regex-tool.el

不是答案(问题已经回答),只是一般提示。

于 2008-09-16T22:38:18.633 回答
0

[0-9][0-9][0-9] 将匹配至少3 个数字,因此正如 Joe 所提到的,您必须(至少)包括 \b 或任何其他可以分隔数字的内容。可能最可靠的方法是:

[^0-9][0-9][0-9][0-9][^0-9]

于 2008-09-16T05:36:10.260 回答
-3

这很简单:

[0-9][0-9][0-9]
于 2008-09-16T05:27:20.810 回答