Pagina 1 di 1
espressioni regolari... sostituzione di [^
Inviato: ven 7 lug 2006, 12:24
da ZeroUno
Ho preso a studiare le espressioni regolari.
ora mi trovo di fronte a questo problema:
pippo
pluto
paperino
espressione regolare voluta: "prendi tutto tranne pluto"
per un solo carattere è facile; su una lista
a
b
c
e non voglio 'b'
[^b]
va più che bene.
sulla prima lista, in teoria va bene
^[^p][^i][^p][^p][^o]$
(facciamo la supposizione che lavoriamo tutto in minuscolo)
però io non conosco a priori la parola da escludere dalla lista.
Ho quindi bisogno di qualcosa di simile alle [], ma che funzioni per argomenti un po' più complessi, quali potrebbe essere anche un'altra espressione regolare dentro un (); per l'OR (come [ax3e]) si sostituisce tranquillamente con (a|x|3|e), ma il [^ come lo sostituisco?
Ciao,
01
Inviato: ven 7 lug 2006, 14:03
da dapuzz
Non ci ho capito una cippa. Ma l'unica cosa che posso dire è che
^[^p][^i][^p][^p][^o]$ dovrebbe ad occhio e croce essere equivalente a ^[^pippo]$
Quindi se non vuoi nè pippo nè pluto dovrebbe andarci [^pippo|^pluto]. Ti sono stato utile?
Domanda, ma come? vuoi escludere una parola, ma non sai che parola?

Inviato: ven 7 lug 2006, 14:29
da ZeroUno
dapuzz ha scritto:
^[^p][^i][^p][^p][^o]$ dovrebbe ad occhio e croce essere equivalente a ^[^pippo]$
Quindi se non vuoi nè pippo nè pluto dovrebbe andarci [^pippo|^pluto]. Ti sono stato utile?
No.
^[^pippo]$ equivale a ^([^p]|[^i]|[^p]|[^p]|[^o])$ ovvero prenderebbe tutte le parole di un carattere che non siano p,i,o
l'altra prende tutte le parole che non contengono p,i,o,l,u,t,^,| (in cui ^ e | sono proprio i simboli relativi), mentre a me serve l'intera parlola.
Tra l'altro la mia è pure sbagliata:
che non comincia per 'p' (e quindi non becchiamo Pippo Pluto)
non continua per 'i' (e quindi non becchiamo Pippo Pluto mInni)
non continua per 'p' (e quindi non becchiamo Pippo Pluto mInni toPolino)
non continua per 'p' (e quindi non becchiamo Pippo Pluto mInni toPolino carPa)
non continua (e termina) per 'o' (e quindi non becchiamo Pippo Pluto mInni toPolino carPa carrO)
(il mio intento era bloccare solo pippo)
Domanda, ma come? vuoi escludere una parola, ma non sai che parola?

La parola potrebbe essere presa da una variabile o da una combinazione di altre parole o da un back reference
Ciao,
01
Inviato: ven 7 lug 2006, 15:03
da dapuzz
Creato file asd con questo contenuto
Codice: Seleziona tutto
dapuzz@slax:~$ cat asd
pippo
pluto
paperino
minni
dapuzz@slax:~$ grep [^pippo] asd
pluto
paperino
minni
dapuzz@slax:~$grep [^pippo\|^pluto] asd
paperino
minni
il \ è solo per escapare il pipe. comunque le espressioni regolari non sono mai state il mio forte! E ne sto dando ampia dimostrazione :asd:
Inviato: ven 7 lug 2006, 16:33
da ZeroUno
[quote="dapuzz"]
Codice: Seleziona tutto
dapuzz@slax:~$ cat asd
pippo
pluto
paperino
minni
dapuzz@slax:~$ grep [^pippo] asd
pluto
paperino
minni
Okkio, questa regexp ha funzionato per caso.
Aggiungi una voce "pio" (per esempio) alla lista e noterai che viene troncata anche quella.
Ciao,
01
Inviato: ven 7 lug 2006, 16:40
da dapuzz
vero,

per fortuna il prof di lab non se n'è mai accorto

Inviato: ven 7 lug 2006, 19:49
da Paoletta
per prendere tutte le stringhe tranne una basta usare l'opzione -v di grep
ad esempio, se file.txt é costituito da
dá come risultato
Inviato: sab 8 lug 2006, 11:37
da ZeroUno
Paoletta ha scritto:per prendere tutte le stringhe tranne una basta usare l'opzione -v di grep
Conosco grep a menadito, e ti so fare incastri a non finire tra grep sed egrep, -v -w -i -...
Ma ora io non posso passare nessuna opzione a grep & c., quindi devo lavorare esclusivamente sulla espressione regolare.
Matteo
Inviato: sab 8 lug 2006, 13:45
da Paoletta
ZeroUno ha scritto:Paoletta ha scritto:per prendere tutte le stringhe tranne una basta usare l'opzione -v di grep
Conosco grep a menadito, e ti so fare incastri a non finire tra grep sed egrep, -v -w -i -...
Ma ora io non posso passare nessuna opzione a grep & c., quindi devo lavorare esclusivamente sulla espressione regolare.
Matteo
in tal caso non credo che si possa fare...
Inviato: mar 11 lug 2006, 13:16
da targzeta
ZeroUno ha scritto:...io non posso passare nessuna opzione a grep & c., quindi devo lavorare esclusivamente sulla espressione regolare.
Non penso si possa trovare soluzione, anche io quando studiai le RE mi posi la stessa questione senza venirne mai a capo.
Fatto sta che poi alla fine non e' cosi' grave, basta capire cosa vuoi fare? Se vuoi fare uno script, non vedo perche' non usare 'grep -v'. Se vuoi scrivere un programma, non vedo la difficolta' nel farti una piccola funzioncina che faccia al caso tuo.
Spina
In effetti penso ci siano ragioni valide che spieghino il perche' non si possa trovare, in un testo, il complemento di una stringa data. La prima cosa che mi viene in mente e' che le RE sono usate per fare matching e non per fare 'non matching'.
Inviato: mar 11 lug 2006, 13:28
da Paoletta