2013-08-12 12 views
5

ho questa espressione:utilizzando gsub nelle stringhe rubino correttamente

channelName = rhash["Channel"].gsub("'", " ") 

funziona benissimo. Tuttavia, posso solo sostituire 1 carattere con esso. Voglio aggiungere qualche altro personaggio da sostituire. Così ho provato la seguente:

channelName = rhash["Channel"].gsub(/[':;] /, " ") 

Questo non ha funzionato, cioè non v'è intercambiabilità fatto su stringhe e alcun messaggio di errore. Ho anche provato questo:

channelName = rhash["Channel"].gsub!("'", " ") 

Questo ha portato a una stringa che era vuota. Quindi assolutamente non quello che desideravo.

mi piacerebbe avere un metodo gsub di sostituire i seguenti caratteri con uno spazio nella mia stringa:

' ; : 

Le mie domande:

  1. Come posso strutturare il mio metodo gsub in modo che tutte le istanze dei caratteri sopra sono sostituite con uno spazio?

  2. Che cosa sta succedendo con gsub! sopra come il suo ritorno vuoto.

+0

Lo spazio bianco conta molto in un'espressione regolare ... – meagar

+0

@meagar A meno che non si usi l'opzione 'x' corretta? http://www.ruby-doc.org/core-2.0/Regexp.html#label-Options – squiguy

+1

Perché non usare ['String # tr'] (http://ruby-doc.org/core-2.0/String .html # method-i-tr) per cose semplici come questa? –

risposta

13

Il tuo secondo tentativo era molto vicino. Il problema è che hai lasciato uno spazio dopo la parentesi di chiusura, il che significa che stava cercando solo uno di quei simboli seguito da uno spazio.

Prova questa:

channelName = rhash["Channel"].gsub(/[':;]/, " ") 
+1

Idem in questa risposta. Inoltre, 'string.gsub! (" '"," ")' Restituirà nil se non sono state eseguite sostituzioni, quindi perché probabilmente stai vedendo 'rhash [" Channel "] = nil'. Vedi: http://ruby-doc.org/core-2.0/String.html#method-i-gsub-21 – jslivka

+0

@jslivka grazie per questo chiarimento +1. Mi stavo chiedendo perché stava succedendo. – banditKing

+0

@Dylan Markow Grazie. Questo ha funzionato – banditKing

4

Ciò non rispondere alla tua domanda, ma è un modo migliore per farlo.

channelName = rhash["Channel"].tr("':;", " ") 
+0

Grazie per il suggerimento. Mi aiuta a scrivere codice migliore :) +1 – banditKing

Problemi correlati