Как создать регулярное выражение в Emacs для ровно 3 цифр?
Я хочу создать regexp в Emacs, который соответствует ровно 3 цифрам. Например, я хочу сопоставить следующее:
123
345
789
Но не
1234
12
12 23
Если я использую [0-9]+
, я сопоставляю любую строку цифр. Я думал, что [0-9]{3}
будет работать, но при тестировании в re-builder он ничего не соответствует.
Ответы
Ответ 1
Если вы входите в регулярное выражение в интерактивном режиме и хотите использовать {3}
, вам нужно использовать обратную косую черту, чтобы избежать фигурных скобок. Если вы не хотите соответствовать какой-либо части более длинных строк чисел, используйте \b
для соответствия границам слов по номерам. Это оставляет:
\b[0-9]\{3\}\b
Для тех, кто хочет получить дополнительную информацию о \b
, см. документы:
соответствует пустой строке, но только в начале или конце слова. Таким образом, \bfoo\b
соответствует любому вхождению foo
как отдельному слову. \bballs?\b
соответствует ball
или balls
как отдельное слово. \b
соответствует в начале или в конце буфера независимо от того, какой текст появляется рядом с ним.
Если вы хотите использовать это регулярное выражение из кода elisp, как всегда, вы должны снова избегать обратных косых черт. Например:
(highlight-regexp "\\b[0-9]\\{3\\}\\b")
Ответ 2
[0-9][0-9][0-9]
, [0-9]{3}
или \d{3}
не работают, потому что они также соответствуют "1234".
Так что это зависит от того, что представляет собой разделитель.
Если это переменная, вы можете сделать ^/[0-9]{3}/$
. Если он ограничен пробелами, вы можете сделать \w+[0-9]{3}\w+
Ответ 3
Как отмечают другие, вам нужно сопоставить не только три цифры. Перед цифрами вы должны иметь либо начало строки, либо нечто, что не является цифрой. Если emacs поддерживает \D, используйте его. В противном случае используйте набор [^ 0-9].
В двух словах:
(^|\D)\d{3}(\D|$)
Ответ 4
Вы должны использовать это:
"^\d{3}$"
Ответ 5
При экспериментировании с регулярными выражениями в Emacs я могу найти regex-tool:
ftp://ftp.newartisans.com/pub/emacs/regex-tool.el
Не ответ (на этот вопрос уже дан ответ), просто общий совет.
Ответ 6
[0-9] [0-9] [0-9] будет соответствовать минимум 3 числам, так как, как сказал Джо, вам нужно (как минимум) включить \b или что-нибудь еще, что будет ограничивать числа, Вероятно, самый надежный способ:
[^ 0-9] [0-9] [0-9] [0-9] [^ 0-9]
Ответ 7
Это довольно просто:
[0-9][0-9][0-9]