我想在Emacs中创建一个恰好匹配3位数的正则表达式。例如,我想匹配以下内容:
123 345 789
但不
1234 12 12 23
如果我使用[0-9]+,我匹配任何一个数字串。我以为[0-9]{3}会工作,但当在re-builder中测试时,它不匹配任何东西。
[0-9]+
[0-9]{3}
lvmkulzt1#
如果你是交互式输入正则表达式,并且想使用{3},你需要使用反斜杠来转义大括号。如果你不想匹配更长的数字字符串的任何部分,使用\b来匹配数字周围的单词边界。这样就剩下:
{3}
\b
\b[0-9]\{3\}\b
如需了解有关\b的更多信息,请参阅以下文档:会比对空字串,但只会比对单字的开头或结尾。因此,\bfoo\b会将任何出现的foo当做个别的单字来比对。\bballs?\b会将ball或balls当做个别的单字来比对。\b会比对缓冲区的开头或结尾,而不管它旁边显示的文字为何。如果你想在elisp代码中使用这个正则表达式,你必须再次转义反斜杠。例如:
\bfoo\b
foo
\bballs?\b
ball
balls
(highlight-regexp "\\b[0-9]\\{3\\}\\b")
ix0qys7i2#
[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]
\d{3}
^/[0-9]{3}/$
\w+[0-9]{3}\w+
nwwlzxa73#
您应该使用以下命令:
"^\d{3}$"
ruoxqz4g4#
正如其他人所指出的,你需要匹配的不仅仅是三个数字。在数字之前,你必须有一个行开始或者不是数字的东西。如果emacs支持\D,就使用它。否则使用集合[^0-9]。简而言之:
(^|\D)\d{3}(\D|$)
rm5edbpk5#
在Emacs中使用正则表达式时,我发现regex-tool非常有用:ftp://ftp.newartisans.com/pub/emacs/regex-tool.el不是答案(问题已经回答了),只是一个一般的提示。
olqngx596#
[0-9][0-9][0-9]将匹配 * 最少 * 3个数字,所以正如Joe提到的,您必须(至少)包括\b或任何其他将分隔数字的内容。可能最可靠的方法是:[第0页-第9页][第0页-第9页][第0页-第9页][第0页-第9页][第0页-第9页]
qeeaahzv7#
这个看起来不错
"[+-]?\d{3}"
[+-]
?
\d
这将精确匹配3位数字,无论是正数还是负数:
ubof19bj8#
很简单:
8条答案
按热度按时间lvmkulzt1#
如果你是交互式输入正则表达式,并且想使用
{3}
,你需要使用反斜杠来转义大括号。如果你不想匹配更长的数字字符串的任何部分,使用\b
来匹配数字周围的单词边界。这样就剩下:如需了解有关
\b
的更多信息,请参阅以下文档:会比对空字串,但只会比对单字的开头或结尾。因此,
\bfoo\b
会将任何出现的foo
当做个别的单字来比对。\bballs?\b
会将ball
或balls
当做个别的单字来比对。\b
会比对缓冲区的开头或结尾,而不管它旁边显示的文字为何。如果你想在elisp代码中使用这个正则表达式,你必须再次转义反斜杠。例如:
ix0qys7i2#
[0-9][0-9][0-9]
、[0-9]{3}
或\d{3}
不起作用,因为它们也匹配“1234”。因此,这取决于分隔符是什么。
如果它在变量中,则可以执行
^/[0-9]{3}/$
。如果它由空格分隔,则可以执行\w+[0-9]{3}\w+
nwwlzxa73#
您应该使用以下命令:
ruoxqz4g4#
正如其他人所指出的,你需要匹配的不仅仅是三个数字。在数字之前,你必须有一个行开始或者不是数字的东西。如果emacs支持\D,就使用它。否则使用集合[^0-9]。
简而言之:
rm5edbpk5#
在Emacs中使用正则表达式时,我发现regex-tool非常有用:
ftp://ftp.newartisans.com/pub/emacs/regex-tool.el
不是答案(问题已经回答了),只是一个一般的提示。
olqngx596#
[0-9][0-9][0-9]将匹配 * 最少 * 3个数字,所以正如Joe提到的,您必须(至少)包括\b或任何其他将分隔数字的内容。可能最可靠的方法是:
[第0页-第9页][第0页-第9页][第0页-第9页][第0页-第9页][第0页-第9页]
qeeaahzv7#
这个看起来不错
[+-]
:匹配“+”或“-”。?
:匹配上一个标记的次数在零到一次之间。\d
:匹配数字(相当于[0-9])。{3}
:与前一个标记完全匹配3次。这将精确匹配3位数字,无论是正数还是负数:
ubof19bj8#
很简单: