Pagina 1 di 3

espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 10:36
da tgmx
Ciao Ragazzi,
devo individuare un codice di 15 caratteri in una stringa di 200 in una piccola applicazione in qt4.
Vorrei fare questa cosa utilizzando le espressioni regolari ma non capisco come posso definirla.

Il codice da individuare può avere da 7 a 15 cifre e i restanti caratteri (a destra) sono "spazi"...

Se il codice fosse sempre di 7 caratteri seguiti da 8 spazi la cosa sarebbe semplice:

Codice: Seleziona tutto

[0-9]{7}[\\ ]{8}
ma il numero di caratteri "utili" e di spazi è variabile...

consigli...?

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 10:56
da tgmx
In pratica quello che mi servirebbe è qualcosa tipo:

Codice: Seleziona tutto

([0-9]{7,}[\\ ]{0,}){15}
ma così come l'ho scritto non funziona...

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 10:59
da targzeta
E a sinistra che c'è? Nel senso, la stringa inizia con i caratteri utili?

Emanuele

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:01
da tgmx
spina ha scritto:E a sinistra che c'è? Nel senso, la stringa inizia con i caratteri utili?

Emanuele
Sì, la stringa di 200 caratteri inizia con i caratteri "utili" del codice di 15 caratteri.

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:03
da targzeta
tgmx ha scritto:...Sì, la stringa di 200 caratteri inizia con i caratteri "utili" del codice di 15 caratteri.
Ma allora non puoi prendere tutto quello che c'è prima degli spazi? O anche gli spazi possono far parte dei caratteri utili?

Emanuele

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:12
da tgmx
Per chiarezza riporto una ipotetica forma che potrebbe avere la stringa:

Codice: Seleziona tutto

12345678       ergwerg wergwery 45g wervw45y 45 4trh 45 rrrrrrrrqwer234 34t 234t5245 tg4sfg 4tg345 rt.....
a me serve verificare che nella stringa ci sia quel

Codice: Seleziona tutto

"12345678       " 
e poi successivamente provvederò ad estrarre
il codice togliendo gli spazi superflui.

Andrebbero bene anche stringhe come:

Codice: Seleziona tutto

1234567899     ergwerg wergwery 45g wervw45y 45 4trh 45 rrrrrrrrqwer234 34t 234t5245 tg4sfg 4tg345 rt.....
123412341234123ergwerg wergwery 45g wervw45y 45 4trh 45 rrrrrrrrqwer234 34t 234t5245 tg4sfg 4tg345 rt.....
Cioè per me è importante che la somme dei caratteri "utili" più gli spazi seguenti sia esattamente 15 caratteri e poi a seguire tutto il resto
della stringa che non mi interessa.

Le combinazioni accettabili sono:
7 caratteri + 8 spazi
8 caratteri + 7 spazi
9 caratteri + 6 spazi
...
...
...
15 caratteri + 0 spazi

Nell'espressione regolare potrei tentare di mettere tutte queste combinazioni in OR ma preferivo qualcosa di più elegante... :)

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:19
da targzeta
Solo un ultima cosa, come accennavo prima, tra i caratteri utili è compreso anche lo spazio? O possiamo dare per scontato che non ci sia? Tanto per intenderci, questa combinazione è accettabile?

Codice: Seleziona tutto

12345678 90     hsgd edke...
Inoltre, da quello che ho capito gli spazi finali non ti interessano giusto?

Emanuele

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:20
da _NYTRO_
Ciao tgmx,
non sono molto ferrato con le RegEx però, prendendo spunto dalla tua base, la prima cavolata che mi viene in mente è:

[0-9]{15}|[0-9]{14}|[0-9]{13}|[0-9]{12}|[0-9]{11}|[0-9]{10}|[0-9]{9}|[0-9]{8}|[0-9]{7} [\\ ]{8}

Lo so, è una porcata però dovrebbe andare bene.. :)
Un caso in cui potrebbe far casino è quando hai una stringa di numeri più lunga di 15 caratteri..

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:22
da _NYTRO_
Mhm, mi sa che non ho capito il problema.. :(

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:24
da tgmx
spina ha scritto:Solo un ultima cosa, come accennavo prima, tra i caratteri utili è compreso anche lo spazio? O possiamo dare per scontato che non ci sia? Tanto per intenderci, questa combinazione è accettabile?

Codice: Seleziona tutto

12345678 90     hsgd edke...
Inoltre, da quello che ho capito gli spazi finali non ti interessano giusto?

Emanuele
La combinazione che hai postato non andrebbe bene.
Per quanto riguarda gli spazi finali (quelli dopo i caratteri "utili") non mi interessano ma è importante che dopo il "codice" ci siano solamente degli spazi se il codice stesso non arriva ad occupare 15 caratteri. Dopo quei 15 caratteri può esserci il mondo intero (di 185 caratteri qualsiasi tipo) tanto non controllo niente di quello che segue.

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:27
da tgmx
_NYTRO_ ha scritto:Ciao tgmx,
non sono molto ferrato con le RegEx però, prendendo spunto dalla tua base, la prima cavolata che mi viene in mente è:

[0-9]{15}|[0-9]{14}|[0-9]{13}|[0-9]{12}|[0-9]{11}|[0-9]{10}|[0-9]{9}|[0-9]{8}|[0-9]{7} [\\ ]{8}

Lo so, è una porcata però dovrebbe andare bene.. :)
Un caso in cui potrebbe far casino è quando hai una stringa di numeri più lunga di 15 caratteri..
Diciamo che con qualche correzione andrebbe bene:
([0-9]{15})|([0-9]{14}[\\ ]{1})|([0-9]{13}[\\ ]{2})|.....
anche se ancora questo non l'ho provato.

Prima di optare per un OR gigante preferivo cercare una soluzione più compatta...

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:28
da targzeta
Non ho capito bene, ora andiamo con le supposizioni e mi dici cosa non va. Ad esempio questa espressione potrebbe andare?

Codice: Seleziona tutto

^([^[:space:]])*
becca tutti i caratteri iniziali che non comprendono gli spazi, quindi si ferma al primo spazio.

Emanuele

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:28
da _NYTRO_
Scusa, allora non potresti tagliare a priori i primi 15 caratteri di ogni riga in modo da eseguire i controlli solo su quelli? :?

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:31
da tgmx
spina ha scritto:Non ho capito bene, ora andiamo con le supposizioni e mi dici cosa non va. Ad esempio questa espressione potrebbe andare?

Codice: Seleziona tutto

^([^[:space:]])*
becca tutti i caratteri iniziali che non comprendono gli spazi, quindi si ferma al primo spazio.

Emanuele
Intanto non controlla che all'inizio ci siano numeri (a me interessa un codice numerico), poi non controlla se il codice numerico iniziale è più corto di 7 ed infine non controlla che la somma di numeri e spazi sia 15...

Re: espressione regolare & riconoscimento stringa

Inviato: mer 17 giu 2009, 11:33
da targzeta
Ok, codice numerico. Quindi ti interessa anche verificare che il totale tra cifre e spazi sia 15?

Emanuele