Risposte:
Devi usare "\n"not '\n'nel tuo gsub. Le diverse virgolette si comportano in modo diverso.
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 \nper rappresentare il loro vero valore, in questo caso, newline , e consentono l'uso di #{expression}così puoi intrecciare variabili e, beh, praticamente qualsiasi espressione ruby che ti piace nel testo.
Mentre d'altra parte, le virgolette singole 'trattano la stringa letteralmente, quindi non c'è espansione, sostituzione, interpolazione o altro.
In questo caso particolare, è meglio usare il metodo .deleteo .trString per eliminare le nuove righe .
trsia 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.
Quando vuoi rimuovere una stringa, invece di sostituirla puoi usare String#delete(o il suo equivalente mutatore String#delete!), ad esempio:
x = "foo\nfoo"
x.delete!("\n")
x ora è uguale a "foofoo"
In questo caso specifico String#deleteè più leggibile rispetto al gsubfatto che non stai effettivamente sostituendo la stringa con nulla.
deletenon è distruttivo come indicato qui. Restituisce una nuova stringa.
Se vuoi o non ti dispiace rimuovere tutti gli spazi bianchi iniziali e finali dalla tua stringa, puoi usare il stripmetodo.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
come accennato qui .
modifica Il titolo originale di questa domanda era diverso. La mia risposta è per la domanda originale.
striprimuove solo gli spazi bianchi iniziali
Non hai bisogno di una regex per questo. Usa tr:
"some text\nandsomemore".tr("\n","")
replacecambia semplicemente la stringa in una nuova, come l'assegnazione di una variabile; mentre trè una ricerca e sostituzione globale carattere per carattere.
utilizzare chompo stripfunzioni da Ruby:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
striprimuove solo gli spazi bianchi iniziali