regex experts
#1
Inviato 04 aprile 2012 - 13:55
Da una stringa così:
DLH3029 (LUFTHANSA THREE ZERO TWO NINER)
deve uscire una stringa così:
'LUFTHANSA' 'THREE' 'ZERO' 'TWO' 'NINER'
quindi togliere la prima word, togliere le parentesi e quotare ogni word in single quotes.
how to ?
#2
Inviato 04 aprile 2012 - 13:57
Cancelli ogni simbolo ( e ) che trovi.
Dal secondo spazio in poi, metti un apice prima e dopo ogni carattere spazio.
Chiudi la stringa con un apice.
Profit.
#3
Inviato 04 aprile 2012 - 14:13
#4
Inviato 04 aprile 2012 - 14:13
#5
Inviato 04 aprile 2012 - 14:14
Su 10 volte una ci riesco, le altre o le faccio a mano o mi faccio un programma in VB...
#6
Inviato 04 aprile 2012 - 14:29
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#7
Inviato 04 aprile 2012 - 14:44
echo "DLH3029 (LUFTHANSA THREE ZERO TWO NINER)" | sed "s/[^(]*(\([^)]*\)).*/'\1'/" | sed "s/[[:space:]]\+/' '/g"
'LUFTHANSA' 'THREE' 'ZERO' 'TWO' 'NINER'
#8
Inviato 04 aprile 2012 - 14:46
Ci avrei messo una settimana per trovare quella sequenza di caratteri...
#9
Inviato 04 aprile 2012 - 14:48
Il bello è che m'ha detto che non è possibile visto che non si possono fare loops col sed.
Son rimasto basito! gli ho detto "cristo Wolfgang, no lo so fare col regex ma prima elimini la prima parola e sostituisci le () coi quotes poi sostituisci gli spazi col quote+spazio+quote'".
#10
Inviato 04 aprile 2012 - 14:49
Ci avrei messo una settimana per trovare quella sequenza di caratteri...
La prima sostituzione l'ha azzeccata alla prima botta, ci son rimasto così
#11
Inviato 04 aprile 2012 - 14:49
#12
Inviato 04 aprile 2012 - 14:54
Comunque odio le expression per la sostituzione dei caratteri. Mi fanno venire l'orchite.
Vero ma sono di una potenza impressionante.
A me servono perché voglio inserire nel db la regola dell'estrazione della stringa, cosa che il programma non dovrebbe conoscere.
Così è tutto dinamico (sono maniaco della dinamicità ) e per stabilire una nuova regola basta inserire nel db una nuova regex che il programma carica in real time.
Messaggio modificato da trallallero il 04 aprile 2012 - 14:55
#13
Inviato 04 aprile 2012 - 14:54
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#14
Inviato 04 aprile 2012 - 14:56
Ho ancora gli incubi...
#15
Inviato 04 aprile 2012 - 15:01
Idem. Il tutto poi nella shell (sintassi davvero di merda imho, parlo di bash, che è poi l'unica che conosco) rende il mondo un posto più brutto
Poraccio
Ora tocca vedere se Qt accetta una regex del genere.
#16
Inviato 04 aprile 2012 - 15:10
Poraccio
Ora tocca vedere se Qt accetta una regex del genere.
Dai trolla, sono d'accordo per la potenza, la robustezza, la versatilità e quello che ti pare, ma la sintassi è davvero merdosa.
Manco il cobol è così brutto da leggere
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#17
Inviato 04 aprile 2012 - 15:15
Si ma ora qualcuno sa come far eseguire 'sta regex a Qt ?
#18
Inviato 04 aprile 2012 - 16:02
class Program { static void Main(string[] args) { const string original = "DLH3029 (LUFTHANSA THREE ZERO TWO NINER)"; var splitted = original.Remove("(").Remove(")").Split(); var result = ""; splitted.ToList().ForEach(s => result += string.Format("'{0}' ", s)); result = result.Remove(result.Length - 1); Console.WriteLine(result); } } static class StringExtensions { public static string Remove(this string s, string c) { return s.Replace(c, ""); } }sara' pure piu' lungo, ma almeno si capisce cosa fa....
#19
Inviato 04 aprile 2012 - 16:10
Da come scrivi però sembra che tu odi la bash e questo non lo perdono
Si ma ora qualcuno sa come far eseguire 'sta regex a Qt ?
Assolutamente; la bash è splendida a livello di funzionalità, è la sintassi che è una merda.
Mai provato a leggere script di migliaia di righe? Non so te, ma a me viene l'orticaria.
Per contro, il codice postato dallo squaloTigre lo capisce pure uno che non ha mai visto c#, e lo si legge in 10 secondi se sei bravo, 30 se sai almeno accendere un computer
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#20
Inviato 04 aprile 2012 - 16:14