2010-11-16 14 views

risposta

130

è necessario utilizzare "\n" non '\n' nel vostro gsub. Le diverse virgolette si comportano diversamente.

Le virgolette doppie " consentono l'espansione dei caratteri e l'interpolazione delle espressioni, ad es. ti permettono di usare caratteri di controllo di escape come \n per rappresentare il loro vero valore, in questo caso, newline, e consentire l'uso di #{expression} in modo da poter tessere variabili e, più o meno, qualsiasi espressione rubino che ti piace nel testo.

Mentre d'altra parte, le virgolette singole ' trattano la stringa letteralmente, quindi non c'è espansione, sostituzione, interpolazione o cosa hai.

In questo caso particolare, è meglio utilizzare il metodo .delete o .tr String per eliminare i newlines.

See here for more info

+12

sintassi corretta sarebbe davvero essere.gsub (/ \ n /, "") –

+2

@David è corretto. Tuttavia, sentivo che era importante mostrare che le virgolette fanno la differenza, dal momento che ciò avvantaggerebbe Ben a questo punto. Intendiamoci, David, probabilmente è più una questione di stile che "corretta". Personalmente ritengo che 'tr' sia una scelta migliore per questo compito, ma come ho detto, ho pensato che fosse meglio sottolineare la differenza tra virgolette singole e doppie quando ho risposto. – ocodo

19

Non avete bisogno di una regex per questo. Usa tr:

"some text\nandsomemore".tr("\n","") 
48

Quando si desidera rimuovere una stringa, piuttosto che sostituirlo è possibile utilizzare String#delete (o il suo mutator equivalente String#delete!), ad esempio:

x = "foo\nfoo" 
x.delete!("\n") 

x ora è uguale a "foofoo"

In questo caso specifico String#delete è più leggibile di gsub poiché in realtà non si sostituisce la stringa con nulla.

+3

In Ruby 1.9.3 almeno, 'delete' non è distruttivo come indicato qui. Restituisce una nuova stringa. –

+0

Ben individuato. Ho aggiornato lo snippet di codice per utilizzare la versione muter String # delete! piuttosto che String # delete –

29

Se si desidera o non si mente di avere tutti gli spazi bianchi iniziali e finali della stringa rimossa, è possibile utilizzare il metodo strip.

" hello ".strip #=> "hello" 
"\tgoodbye\r\n".strip #=> "goodbye" 

come detto here.

modifica Il titolo originale per questa domanda era diverso. La mia risposta è per la domanda originale.

+2

Questo non risponde alla domanda. 'strip' rimuove solo gli spazi bianchi iniziali e finali: http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 – thelostspore

+0

@mvdanj Sì, dati i dettagli di questa particolare domanda non risponde, ma risponde alla domanda basandosi solo sul titolo. Sospetto che sia per questo che le persone lo hanno trovato utile. – ThomasW

+0

Il titolo è stato cambiato dal momento in cui inizialmente ho risposto. – ThomasW

10

uso chomp o strip funzioni da Ruby:

"abcd\n".chomp => "abcd" 
"abcd\n".strip => "abcd" 
+2

Questo non risponde alla domanda. 'strip' rimuove solo gli spazi bianchi iniziali e finali - http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 – thelostspore

+1

chomp è il modo migliore ... non posso credere questo ha così meno upvotes – user1735921

+0

nel metodo chomp, \ n e \ r vengono rimossi dalla fine di str se esistono, non nel mezzo. Quindi questo non risolve la domanda OP – silva96

Problemi correlati