RegEx - Corresponde a números de comprimento variável

130

Estou tentando analisar um documento que tem números de referência espalhados por ele.

Texto texto texto {4: 2} texto mais incrível {4: 3} muito mais tarde em {222: 115} e ainda mais texto.

As referências sempre estarão entre colchetes e sempre haverá dois pontos entre os dois. Eu escrevi uma expressão para encontrá-los.

{[0-9]:[0-9]}

No entanto, isso obviamente falha no momento em que você encontra um número de dois ou três dígitos, e estou tendo problemas para descobrir o que deveria ser. Nunca haverá mais de 3 dígitos {999: 999} com o tamanho máximo para lidar.

Alguém tem uma idéia de uma expressão adequada para lidar com isso?

Jarrod Nettles
fonte
8
Mesmo que o OP não se importe, estou curioso: por que o voto negativo nesta questão? Não vejo nada de errado nisso.
John
3
@ John: Por algum motivo, as pessoas gostam de votar de forma negativa com perguntas fáceis, especialmente na regextag.
CanSpice
1
No final, essa pergunta obteve uma classificação mais alta no google e eu encontrei minha resposta nesta.
Jasonfish

Respostas:

132
{[0-9]+:[0-9]+}

tente adicionar mais pontos

gênese
fonte
Demorei muito para encontrar ... obrigado por esta informação!
level42 6/07
76

Qual mecanismo de regex você está usando? A maioria deles suportará a seguinte expressão:

\{\d+:\d+\}

Na \dverdade, é uma abreviação para [0-9], mas a parte importante é a adição do +que significa "um ou mais".

Lily Ballard
fonte
31

Tente o seguinte:

{[0-9]{1,3}:[0-9]{1,3}}

Os {1,3}meios "correspondem entre 1 e 3 dos caracteres anteriores".

CanSpice
fonte
8

Você pode especificar quantas vezes deseja que o item anterior corresponda usando {min,max}.

{[0-9]{1,3}:[0-9]{1,3}}

Além disso, você pode usar \ddígitos, em vez da [0-9]maioria dos tipos de expressões regulares:

{\d{1,3}:\d{1,3}}

Você também pode considerar escapar do exterior {e }, apenas para deixar claro que eles não fazem parte de uma definição de repetição.

Andrew Clark
fonte
2
Não, por favor não faça isso com a maioria dos sabores de regex, a menos que você ama dígitos não europeus: fileformat.info/info/unicode/category/Nd/list.htm
Xanatos
1

{\ d *: \ d *} deve funcionar.

* significa corresponder 0 ou mais das ocorrências anteriores, que é um dígito.

Ryan Y
fonte