Repository 32bit  Forum
Repository 64bit  Wiki

espressione regolare & riconoscimento stringa

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 9:36

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...?
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 9:56

In pratica quello che mi servirebbe è qualcosa tipo:
Codice: Seleziona tutto
([0-9]{7,}[\\ ]{0,}){15}


ma così come l'ho scritto non funziona...
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda targzeta » mer giu 17, 2009 9:59

E a sinistra che c'è? Nel senso, la stringa inizia con i caratteri utili?

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 10:01

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.
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda targzeta » mer giu 17, 2009 10:03

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 10:12

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... :)
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda targzeta » mer giu 17, 2009 10:19

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: espressione regolare & riconoscimento stringa

Messaggioda _NYTRO_ » mer giu 17, 2009 10:20

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..
_NYTRO_
Linux 2.4
Linux 2.4
 
Messaggi: 419
Iscritto il: ven mag 07, 2004 23:00

Re: espressione regolare & riconoscimento stringa

Messaggioda _NYTRO_ » mer giu 17, 2009 10:22

Mhm, mi sa che non ho capito il problema.. :(
_NYTRO_
Linux 2.4
Linux 2.4
 
Messaggi: 419
Iscritto il: ven mag 07, 2004 23:00

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 10:24

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.
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 10:27

_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...
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda targzeta » mer giu 17, 2009 10:28

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: espressione regolare & riconoscimento stringa

Messaggioda _NYTRO_ » mer giu 17, 2009 10:28

Scusa, allora non potresti tagliare a priori i primi 15 caratteri di ogni riga in modo da eseguire i controlli solo su quelli? :?
_NYTRO_
Linux 2.4
Linux 2.4
 
Messaggi: 419
Iscritto il: ven mag 07, 2004 23:00

Re: espressione regolare & riconoscimento stringa

Messaggioda tgmx » mer giu 17, 2009 10:31

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...
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: espressione regolare & riconoscimento stringa

Messaggioda targzeta » mer giu 17, 2009 10:33

Ok, codice numerico. Quindi ti interessa anche verificare che il totale tra cifre e spazi sia 15?

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6175
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti