PDA

Visualizza la versione completa : espressioni regolari - quesito 2 (... che professionale che sono!)


MARTEDI
06-09-2006, 11:20
ho la mia variabile:

$a="OGGI è una bella giornata (25° di temperatura), mi PIACEREBBE ANDARE a fare un giro in bicicletta";

Voglio ottenere:

$a="-C-OGGI è una bella giornata (25° di temperatura), mi -C-PIACEREBBE -C-ANDARE a fare un giro in bicicletta";

ovvero aggiungere "-C-" all'inizio di ogni parola scritta in maiuscolo (è un esempio, quindi non chiedetevi a cosa serve mettere "-C-")
PS Non è detto che la parola in maiuscolo sia sempre seguita da uno spazio

Con questa espressione regolare ottengo una cosa carina, ma giustamente, mi mangia la prima lettera e uno spazio

espressione
$a =~ s/[A-Z](.+?)[^A-Z]/-C-$1/g;

risultato
$a="-C-GGIè una bella giornata (25° di temperatura), mi -C-IACEREBBE-C-NDAREa fare un giro in bicicletta"

La soluzione più lunga sarebbe quella di
- scorporare la frase carattere x carattere
- fare un ciclo al cui interno metto un confronto con il carattere precedente
- se ho, fra carattere precedente e carattere letto, un'alternanza (simbolo / lettera minuscola / numero),lettera maiuscola allora aggiungo -C- all'inizio del carattere letto
... bla bla bla ... troppo lungo!

Grazie

Mich_
06-09-2006, 11:40
s/([A-Z]+?)[^A-Z]/-C-$1/g;

Ho spostato la parentesi in modo da includere il primo carattere ed ho fatto in modo che la "parola" si chiuda con qualsiasi carattere diverso da maiuscola.
Prova a vedere se ti va bene.

Forse si puo` anche togliere il [^A-Z] e lasciare semplicemente:
s/([A-Z]+?)/-C-$1/g;

MARTEDI
06-09-2006, 11:50
la seconda soluzione non funziona, mentre la prima è ottima. Mi permetto di correggerla quindi così:

s/([A-Z]+?[^A-Z])/-C-$1/g;

per non perdermi il carattere subito successivo.
Prima o poi mi entreranno nel cervello 'ste espressioni regolari!

Grazie

Mich_
06-09-2006, 12:17
Originariamente inviato da MARTEDI Prima o poi mi entreranno nel cervello 'ste espressioni regolari!
E` un processo lungo, ma va a buon fine (intendo l'azione di "entrare nel cervello").
Le RE sono una potenza dell'informatica, ma proprio per questo sono un po' dure da digerire. Anch'io ho ancora le mie belle difficolta` (come si evince dai consigli che do), e sono alcuni anni che le uso.

shishii
06-09-2006, 17:30
ritengo che la più semplice sia:

s/\b([A-Z]+)\b/-C-$1/g;

\b rappresenta qualunque possibile delimitazione di parola, cioè spazio, virgola, accapo, ecc.

MARTEDI
07-09-2006, 09:07
funziona perfettamente.
Ho provato a dare una sbirciata alle espressioni regolari in perl qui:

programmazione espressioni-regolari (http://programmazione.html.it/guide/lezione/1262/espressioni-regolari/)

mi sembra di capire che vi sono altri simboli/caratteri oltre a quelli indicati ... sbaglio?

Scusate le incertezze ma non è più così semplice trovare libri dedicati a Perl (soprattutto in Italiano!). Un esempio: il libro di Larry Wall è introvabile, pare non esista più l'editore!

shishii
12-09-2006, 19:43
qui puoi trovare molto materiale:

http://pod2it.sourceforge.net/pods/

Loading