Expressões regulares

3 respostas
rede007

Senhores,
Tenho que fazer uma expressão regular que valide o número que casas decimais após um ponto (.). Isso poderá ser variável pois há momento que serão 3 casas decimais após o ponto ou 4 casas decimais. Contudo gostaria de uma solução que fosse dinâmica. ou seja um o número de casas fosse pre configurado em variável depois validado se as casas decimais corresponde ao número contido nessa variável.

Eu tentei fazer assim, mas não está funcionado corretamente, pois está aceitando mais de três números.

Match match = Regex.Match(txtBody.Text, @"[0-9].[0-9]{3}");

Essa expressão diz: qualquer número , seguido de um ponto, seguindo de qualquer número com três ocorrências ex: 9. 236. Contudo essa expressão não está sendo respeitada.

3 Respostas

B

O formato é sempre N.NNN? Não tem mais números na parte inteira? Em todo caso:

String casas = "3"; String regex = "[0-9][.][0-9]{"+ casas +"}";

rede007
É o seguinte, essa expressão eu  tentei, e no c# ela aceita passar com mais de 3 casas especificadas. Ex 2,4543

Casas = 3;

("[0-9][.][0-9]{" + Casas + });

Essa ER, pelo menos no c# está casando com 5.233 mas também com 5.2333 ou 5.59288, ou seja, está ceitando mais de três casas especificadas nas chaves {}

T

Não custa nada ler a documentação. Se você tivesse lido a documentação (e entendido o exemplo) em http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx teria visto que esse objeto serve para PERCORRER a string, não para bater com ela inteira. No seu caso, a expressão bateu corretamente com o começo do número (2.454) mas ainda há mais um pedacinho da string que pode ser percorrida para ele encontrar mais uma instância da expressão regular.

O que você quer é algo como:

Match match = Regex.Match(txtBody.Text, @"^[0-9].[0-9]{3}$");

que força a bater com a string inteira, não com um pedaço dela.

Criado 6 de julho de 2009
Ultima resposta 7 de jul. de 2009
Respostas 3
Participantes 3