regex 我如何在Emacs中创建一个正好3位数的正则表达式?

5ssjco0h  于 2022-11-18  发布在  Mac
关注(0)|答案(8)|浏览(222)

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

123
345
789

但不

1234
12
12 23

如果我使用[0-9]+,我匹配任何一个数字串。我以为[0-9]{3}会工作,但当在re-builder中测试时,它不匹配任何东西。

lvmkulzt

lvmkulzt1#

如果你是交互式输入正则表达式,并且想使用{3},你需要使用反斜杠来转义大括号。如果你不想匹配更长的数字字符串的任何部分,使用\b来匹配数字周围的单词边界。这样就剩下:

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

如需了解有关\b的更多信息,请参阅以下文档:
会比对空字串,但只会比对单字的开头或结尾。因此,\bfoo\b会将任何出现的foo当做个别的单字来比对。\bballs?\b会将ballballs当做个别的单字来比对。\b会比对缓冲区的开头或结尾,而不管它旁边显示的文字为何。
如果你想在elisp代码中使用这个正则表达式,你必须再次转义反斜杠。例如:

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

ix0qys7i2#

[0-9][0-9][0-9][0-9]{3}\d{3}不起作用,因为它们也匹配“1234”。
因此,这取决于分隔符是什么。
如果它在变量中,则可以执行^/[0-9]{3}/$。如果它由空格分隔,则可以执行\w+[0-9]{3}\w+

nwwlzxa7

nwwlzxa73#

您应该使用以下命令:

"^\d{3}$"
ruoxqz4g

ruoxqz4g4#

正如其他人所指出的,你需要匹配的不仅仅是三个数字。在数字之前,你必须有一个行开始或者不是数字的东西。如果emacs支持\D,就使用它。否则使用集合[^0-9]。
简而言之:

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

rm5edbpk5#

在Emacs中使用正则表达式时,我发现regex-tool非常有用:
ftp://ftp.newartisans.com/pub/emacs/regex-tool.el
不是答案(问题已经回答了),只是一个一般的提示。

olqngx59

olqngx596#

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

qeeaahzv

qeeaahzv7#

这个看起来不错

"[+-]?\d{3}"
  • [+-]:匹配“+”或“-”。
  • ?:匹配上一个标记的次数在零到一次之间。
  • \d:匹配数字(相当于[0-9])。
  • {3}:与前一个标记完全匹配3次。

这将精确匹配3位数字,无论是正数还是负数:

  • 一百二十三|-123| +123
ubof19bj

ubof19bj8#

很简单:

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

相关问题