如何在Emacs中为正好3位数字创建一个正则表达式?

如何在Emacs中为正好3位数字创建一个正则表达式?

How do I create a regex in Emacs for exactly 3 digits?

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

1
2
3
123
345
789

但不是

1
2
3
1234
12
12 23

如果使用[0-9]+,则匹配任何单个数字字符串。 我以为[0-9]{3}可以工作,但是在重建器中测试时,它什么都不匹配。


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

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

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

matches the empty string, but only at the beginning or end of a word. Thus, \bfoo\b
matches any occurrence of foo as a separate word.
\bballs?\b matches ball or balls as a separate word.
\b matches at the beginning or end of the buffer regardless of what text appears next to it.

如果您确实希望像往常一样从elisp代码中使用此正则表达式,则必须再转一次反斜杠。例如:

1
(highlight-regexp"\\b[0-9]\\{3\\}\\b")

[0-9][0-9][0-9][0-9]{3}\d{3}不起作用,因为它们也匹配" 1234"。

因此,这取决于分隔符是什么。

如果在变量中,则可以执行^/[0-9]{3}/$。如果由空格分隔,则可以执行\w+[0-9]{3}\w+


正如其他人指出的,您不仅需要匹配三位数。在输入数字之前,您必须先行开始或输入非数字的内容。如果emacs支持 D,请使用它。否则,请使用设置[^ 0-9]。

简而言之:

1
(^|\D)\d{3}(\D|$)

您应该使用此:

1
"^\d{3}$"

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

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

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


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

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


很简单:

1
[0-9][0-9][0-9]

推荐阅读