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

espressione regolare & riconoscimento stringa

Messaggio 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...?

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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...

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: espressione regolare & riconoscimento stringa

Messaggio da targzeta »

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

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: espressione regolare & riconoscimento stringa

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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... :)

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: espressione regolare & riconoscimento stringa

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

_NYTRO_
Linux 2.x
Linux 2.x
Messaggi: 419
Iscritto il: sab 8 mag 2004, 0:00

Re: espressione regolare & riconoscimento stringa

Messaggio 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..

_NYTRO_
Linux 2.x
Linux 2.x
Messaggi: 419
Iscritto il: sab 8 mag 2004, 0:00

Re: espressione regolare & riconoscimento stringa

Messaggio da _NYTRO_ »

Mhm, mi sa che non ho capito il problema.. :(

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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.

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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...

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: espressione regolare & riconoscimento stringa

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

_NYTRO_
Linux 2.x
Linux 2.x
Messaggi: 419
Iscritto il: sab 8 mag 2004, 0:00

Re: espressione regolare & riconoscimento stringa

Messaggio 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? :?

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: espressione regolare & riconoscimento stringa

Messaggio 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...

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: espressione regolare & riconoscimento stringa

Messaggio da targzeta »

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

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi