Как мне создать регулярное выражение в Emacs точно для 3 цифр? - PullRequest
16 голосов
/ 16 сентября 2008

Я хочу создать регулярное выражение в Emacs, которое точно соответствует 3 цифрам. Например, я хочу сопоставить следующее:

123
345
789

но не

1234
12
12 23

Если я использую [0-9]+, я сопоставляю любую строку цифр. Я думал, что [0-9]{3} будет работать, но при тестировании в пересборщике он ничего не будет соответствовать.

Ответы [ 7 ]

40 голосов
/ 16 сентября 2008

Если вы вводите регулярное выражение в интерактивном режиме и хотите использовать {3}, вам необходимо использовать обратную косую черту, чтобы убрать фигурные скобки. Если вы не хотите сопоставлять какую-либо часть более длинных строк чисел, используйте \b, чтобы сопоставить границы слов вокруг чисел. Это оставляет:

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

Для тех, кому нужна дополнительная информация о \b, см. документы :

соответствует пустой строке, но только в начале или конце слова. Таким образом, \bfoo\b соответствует любому вхождению foo как отдельному слову. \bballs?\b соответствует ball или balls как отдельное слово. \b соответствует началу или концу буфера независимо от того, какой текст появляется рядом с ним.

Если вы хотите использовать это регулярное выражение из кода elisp, как всегда, вы должны избежать обратной косой черты еще раз. Например:

(highlight-regexp "\\b[0-9]\\{3\\}\\b")
6 голосов
/ 16 сентября 2008

[0-9][0-9][0-9], [0-9]{3} или \d{3} не работают, потому что они также соответствуют "1234".

Так что это зависит от того, что является разделителем.

Если это переменная, вы можете сделать ^/[0-9]{3}/$. Если он разделен пробелами, вы можете сделать \w+[0-9]{3}\w+

2 голосов
/ 16 сентября 2008

Как отмечают другие, вам нужно сопоставлять не только три цифры. Перед цифрами у вас должно быть либо начало строки, либо что-то не цифра Если emacs поддерживает \ D, используйте его. В противном случае используйте набор [^ 0-9].

В двух словах:

(^|\D)\d{3}(\D|$)
2 голосов
/ 16 сентября 2008

Вы должны использовать это:

"^\d{3}$"
1 голос
/ 17 сентября 2008

Экспериментируя с регулярными выражениями в Emacs, я нахожу regex-tool весьма полезным:

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

Не ответ (вопрос уже дан), просто общий совет.

0 голосов
/ 16 сентября 2008

[0-9] [0-9] [0-9] будет соответствовать минимуму из 3 чисел, так что, как упоминал Джо, вы должны (как минимум) включить \ b или что-нибудь еще иначе это будет разделять числа. Вероятно, самый верный метод:

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

0 голосов
/ 16 сентября 2008

Все довольно просто:

[0-9][0-9][0-9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...