如何在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
不是一个答案(这个问题已经回答了),只是一个一般性的提示。