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

时间:2020-03-05 18:55:11  来源:igfitidea点击:

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

123
345
789

但不是

1234
12
12 23

如果我使用[0-9] +,我将匹配任何单个数字串。我认为[0-9] {3}可以工作,但是在重建器中进行测试时,它与任何内容都不匹配。

解决方案

回答

很简单:

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

回答

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

\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代码中使用此正则表达式,则必须再转一次反斜杠。例如:

(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 +`

回答

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

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

回答

我们应该使用此:

"^\d{3}$"

回答

正如其他人指出的,我们需要匹配的不仅仅是三位数。在数字之前,我们必须具有行首或者非数字的内容。如果emacs支持\ D,请使用它。否则,请使用设置[^ 0-9]。

简而言之:

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

回答

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

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

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