Pergunta

Quero criar um regexp no Emacs que corresponda exatamente a 3 dígitos.Por exemplo, quero corresponder ao seguinte:

123
345
789

Mas não

1234
12
12 23

Se eu usar [0-9]+ Eu combino qualquer sequência única de dígitos.Eu pensei [0-9]{3} funcionaria, mas quando testado no reconstrutor não corresponde a nada.

Foi útil?

Solução

Se você estiver inserindo o regex de forma interativa e quiser usar {3}, você precisa usar barras invertidas para escapar das chaves.Se você não quiser corresponder nenhuma parte das sequências de números mais longas, use \b para combinar os limites das palavras em torno dos números.Isso deixa:

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

Para quem deseja mais informações sobre \b, ver os documentos:

corresponde à string vazia, mas apenas no início ou no final de uma palavra.Por isso, \bfoo\bcorresponde a qualquer ocorrência de foo como uma palavra separada. \bballs?\b partidas ball ou balls como uma palavra separada. \b corresponde ao início ou ao final do buffer, independentemente do texto que aparece próximo a ele.

Se você quiser usar esse regex do código elisp, como sempre, deverá escapar das barras invertidas mais uma vez.Por exemplo:

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

Outras dicas

[0-9][0-9][0-9], [0-9]{3} ou \d{3} não funcionam porque também correspondem a "1234".

Portanto, depende de qual é o delimitador.

Se estiver em uma variável, você pode fazer ^/[0-9]{3}/$.Se estiver delimitado por espaços em branco, você poderia fazer \w+[0-9]{3}\w+

Você deve usar isto:

"^\d{3}$"

Como outros apontam, você precisa combinar mais do que apenas os três dígitos.Antes dos dígitos você deve ter um início de linha ou algo que não seja um dígito.Se o emacs suportar \D, use-o.Caso contrário, use o conjunto [^0-9].

Resumindo:

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

Ao experimentar expressões regulares no Emacs, acho ferramenta regex bem útil:

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

Não é uma resposta (a pergunta já foi respondida), apenas uma dica geral.

[0-9][0-9][0-9] corresponderá a um mínimo de 3 números, então, como Joe mencionou, você deve (no mínimo) incluir \b ou qualquer outra coisa que delimite os números.Provavelmente o método mais infalível é:

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

É bem simples:

[0-9][0-9][0-9]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top