shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: expressão regular


From: Josenivaldo Benito Junior
Subject: Re: [shell-script] Re: expressão regular
Date: Wed, 5 Dec 2007 16:51:09 -0200

Oi,

eu acho que expressei-me mau.

não existe a forma

GG482733 (que sua expressão pegaria)

O formato correto é: duas letras+dois números+duas letras+dois números+duas
letras

O comprimento total é no máximo 12, mas o mais comum é 4 ou 6 como por
exemplo:

GG48LH
GG67
GG48
JH32HG
...

É mais ou menos assim:

GG -> indica uma grade grande (de latitude e longitude) (quadrada)
GG48 -> se você dividir o quadro GG em pedacinhos (o tamanho não vem ao
caso), GG48 representa um dos pedacinhos de GG (um quadro)
GG48LH -> novamente, divide o quadro GG48 em vários pedaços e GG48LH é um
desses pedaços, GG48JG é outro e assim vai.

Exemplo prático:

O localizador da minha residência é GG67MH (com 6 digitos). Dependendo da
aplicação eu posso informar:

GG67 (menos preciso)
GG67MH (mais preciso)

Então, o comum na aplicação é aparecerem localizadores, um por linha, assim:

GG67
GG35AF
GG67MH
GG48LH
GG67LH
DF45OP
DF54

Eventualmente podem aparecer:

GG67AF33
JH34RD25ES

Mas não estou me preocupando com estes casos, posso cortá-los em 6 digitos
sem perda de informação relevante à minha aplicação. Cortando esses dois
exemplo fica:

GG67AF
JH34RD

Mas, não posso aumentar um grid de 4 digitos para para 6 arbitrariamente,
por exemplo:

usuário entra com GG48
eu não posso assumir GG48LH ou GG48JH ou GG48EJ ... tenho que considerar
apenas GG48

O que eu tentei fazer inicialmente era consistir qualquer sequencia agrupada
de duas letras+dois numeros+duas letras+dois numeros e assim por diante. Só
para ter certeza que não entrem coisas inválidas como?

GGLH
ou
2235
ou
22LH
(tem que começar por letra obrigatoriamente e sempre apos duas letras vem um
numero, depois pode vir duas letras e assim vai)

De fato, o que preciso é que, independente do comprimento (que eu sempre vou
garantir ser maior que 4), a string comece por duas letras seguidas por dois
numeros, eventualmente seguidos por mais duas letras que, eventualmente,
podem estar seguidas de dois números e assim por diante.

A expressão do Thiago acertou na lata. Mas, existe algum motivo especial
para não funcionar no grep? Tipo:

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> echo GG48LH|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
|GG48LH|

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> echo GG48|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
|GG48|

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> echo GG48LH33|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
|GG48LH33|

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> echo GG48LH33|grep '([A-Z]{2}[0-9]{2})+[A-Z]{2}?'

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> echo GG48LH33|grep "([A-Z]{2}[0-9]{2})+[A-Z]{2}?"


O grep não imprime o match. Comi bronha?


Obrigado pelas dicas de todos
Abraço
Benito

>


On 12/5/07, voyeg3r <address@hidden> wrote:
>
>   --- Em address@hidden<shell-script%40yahoogrupos.com.br>,
> "Josenivaldo Benito Junior"
> <jrbenito@...> escreveu
> >
> > Olá turma,
> >
> > Estou apanhando de uma expressão regular. Para ser sincero já não
> sei dizer
> > se ela é possível (deve ser o sono).
> >
> > Preciso pegar strings do tipo:
> >
> > GG48LH
> > JH23
> > JH45ER
> > FJ87SA76
> >
> > Resumindo:
> >
> > Sempre tem duas letras (de A até Z) seguidas de dois números (de 0
> até 9),
> > podendo estar seguidos mais duas letras, podendo estar seguido de
> mais dois
> > números. (duas letras,dois nros., duas letras, dois nros). Mas a
> informação
> > pode ter 2,4,6 ou 8 letras (1,2,3 ou 4 conjuntos de letras e números).
> >
> > O que são essas coisas? Coordenadas em formato World Locator. De
> fato podem
> > ir até 12 algarismos, o comum é 4 ou 6. Na aplicação que estou tentando
> > capturar podem chegar a 8.
> >
> > Tentei algumas coisas básicas. O mais próximo que cheguei foi:
> >
> > [A-Z]{2}[0-9]{2}
>
> ============================
> se o conjunto de números pode ir até 6 faça:
>
> [A-Z]{2}[0-9]{2,6}
>
> >
> > Que pega um par de letras somente se for seguido de um par de
> números. Para
> > uma string tipo GG48LH23JV vai funcionar em dois matches, tem algum
> problema
> > nisso?
> >
> > Pegar um par de letras+um par de números e assim por diante, não resolve
> > toda a situação, pois em 90% dos casos são usados 6 algarismos (ex:
> GG67MH).
> >
> > Alguém pode me dar uma dica?
> >
> > Valeu.
> > Benito
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]