PDA

View Full Version : [RegularExpressionPython] Semplice sostituizione


cdere
21-08-2010, 19:03
Salve ragazzi!
come fare per sostituire in python tramite le regular expression:

parola -> parole
Parola -> Parole

????

e ad esempio, per sostituire la 3 lettera di ogni parola come si fa?

grazie mille!

MEMon
21-08-2010, 22:48
Salve ragazzi!
come fare per sostituire in python tramite le regular expression:

parola -> parole
Parola -> Parole

????

e ad esempio, per sostituire la 3 lettera di ogni parola come si fa?

grazie mille!

Allora per fare il match dell'ultima lettera di una parola puoi usare questa regex

/.$/


Mentre per catturare la terza lettera puoi usare questa

/(?<=.{2})./


Le puoi usare in un replace, io non ho mai usato python ma sicuramente ha funzione per fare il replace dando come parametro una regex.

cdere
22-08-2010, 13:08
ottimo grazie mille, sai consigliarmi un manuale su cui posso farmi una minima cultura?

grazie!

MEMon
22-08-2010, 13:11
Un manuale no, ma qui (http://www.regular-expressions.info/) puoi già trovare una buona dose di informazioni!

cdere
22-08-2010, 15:23
Allora per fare il match dell'ultima lettera di una parola puoi usare questa regex

/.$/



MEMon scusa, ma quella regex mi fa il match dell'ultima lettera della stringa, a me serve dell'ultima parola

MEMon
22-08-2010, 16:45
MEMon scusa, ma quella regex mi fa il match dell'ultima lettera della stringa, a me serve dell'ultima parola

Che vuol dire dell'ultima parola? L'ultima parola di che?
Sii più chiaro.

cdere
22-08-2010, 16:52
hai ragione, scusami:

str = parola parola parola parola parola

MEMon
22-08-2010, 16:53
hai ragione, scusami:

str = parola parola parola parola parola


Quindi la tua richiesta è di voler fare il macth dell'ultima lettera di ogni parola in una stringa?

MEMon
22-08-2010, 17:01
Quindi la tua richiesta è di voler fare il macth dell'ultima lettera di ogni parola in una stringa?

Se la tua richiesta è quella qui sopra puoi usare questa

/\w(?=[^\w]|$)/

cdere
22-08-2010, 17:03
esatto :)

ho fatto questo:
http://regexr.com?2s0tg ma come puoi vedere mi mette anche le parole che hanno come separator / oppure : !!

grazie ancora :)

MEMon
22-08-2010, 17:08
esatto :)

ho fatto questo:
http://regexr.com?2s0tg ma come puoi vedere mi mette anche le parole che hanno come separator / oppure : !!

grazie ancora :)

Ok se ti interssa pure quello allora usa questa

/\w(?=\s|$)/

Questa ti prende solo le parole contenute fra degli "spazi".

cdere
22-08-2010, 17:11
che dire grazie mille, non so come tu faccia!
io mi sento davvero spaesato...

MEMon
22-08-2010, 17:12
che dire grazie mille, non so come tu faccia!
io mi sento davvero spaesato...

Prego, tranquillo è solo questione di impratichirsi un attimo.

Comunque visto che credo ti interessi, la regex in questione fa questo:

\w prende tutte i caratterri alfanumerici, quelli che normalmente compongono una "parola" per così dire
\s|$ fa il match di uno "spazio" o del fine stringa(nel caso la parola sia l'ultima della stringa)
(?=) questo si chiama "Positive lookahead", in pratica fa il match di quello che lo procede, ma senza catturare quello che sta dentro alle tonde
quindi \w(?=\s|$) cattura tutti i caratteri alfanumerici che sono seguiti da uno spazio o è l'ultimo carattere disponibile, senza però catturare gli spazi.

cdere
22-08-2010, 17:19
ok il risultato definitivo per me sembra essere questo:

\w(?=\s|$|\]|,|\.)

ma c'è un modo di sostituire |\]|,|\. con ad es. un character set tipo \d per i digits? (cioè un set che riporta tutti i segni di punteggiatura ecc...)

no vabbè è solo una sega mentale cmq, va benissimo così :)

MEMon
22-08-2010, 17:23
ok il risultato definitivo per me sembra essere questo:

\w(?=\s|$|\]|,|\.)

ma c'è un modo di sostituire |\]|,|\. con ad es. un character set tipo \d per i digits? (cioè un set che riporta tutti i segni di punteggiatura ecc...)

no vabbè è solo una sega mentale cmq, va benissimo così :)

Ma così cosa vorresti ottenere, sinceramente non ti seguo molto :D

Vediamo...

ciao
123prova
test,
pro.ova
elenco:
http:\\www
test-prova

Di queste, quali vuoi considerare parole e quali no?

MEMon
22-08-2010, 17:28
ok il risultato definitivo per me sembra essere questo:

\w(?=\s|$|\]|,|\.)

ma c'è un modo di sostituire |\]|,|\. con ad es. un character set tipo \d per i digits? (cioè un set che riporta tutti i segni di punteggiatura ecc...)

no vabbè è solo una sega mentale cmq, va benissimo così :)

Quello che più si avvicina a quello che chiedi è \W che fa il match di tutti i caratteri NON alfanumerici, il contrario di \w insomma, ma se utilizzi quello ottieni lo stesso risultato che ottenevi con la tua regex ovviamente.

Quindi bisogna sapere cos'è che realmente vuoi perchè ancora non si capisce bene.

cdere
22-08-2010, 17:38
Prego, tranquillo è solo questione di impratichirsi un attimo.

Comunque visto che credo ti interessi, la regex in questione fa questo:

\w prende tutte i caratterri alfanumerici, quelli che normalmente compongono una "parola" per così dire
\s|$ fa il match di uno "spazio" o del fine stringa(nel caso la parola sia l'ultima della stringa)
(?=) questo si chiama "Positive lookahead", in pratica fa il match di quello che lo procede, ma senza catturare quello che sta dentro alle tonde
quindi \w(?=\s|$) cattura tutti i caratteri alfanumerici che sono seguiti da uno spazio o è l'ultimo carattere disponibile, senza però catturare gli spazi.


grazie mille sei stato davvero chiarissimo!!

Ed grazie anche per \W, era quello che cercavo ;)

a buon rendere

Ryuzaki_Eru
22-08-2010, 19:56
ottimo grazie mille, sai consigliarmi un manuale su cui posso farmi una minima cultura?

grazie!

Il libretto di Marco Beri ;)