Come posso rimuovere la stringa "\ n" da una stringa Ruby?


115

Ho questa stringa:

"some text\nandsomemore"

Devo rimuovere "\ n" da esso. ho provato

"some text\nandsomemore".gsub('\n','')

ma non funziona. Come lo faccio? Grazie per aver letto.

Risposte:


172

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 .

per maggiori informazioni vedere qui


17
la sintassi corretta sarebbe davvero .gsub (/ \ n /, "")
boulder_ruby

2
@David ha ragione. Tuttavia, ho ritenuto che fosse importante dimostrare che le virgolette fanno la differenza, dal momento che a questo punto Ben gioverebbe. Intendiamoci, David, probabilmente è più una questione di stile che "corretto". Personalmente penso che 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.
ottobre

60

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.


3
Almeno in Ruby 1.9.3, deletenon è distruttivo come indicato qui. Restituisce una nuova stringa.
Brent Dillingham

Ben individuato. Ho aggiornato lo snippet di codice per utilizzare la versione di mutator String # delete! invece di eliminare la stringa #
Paul Leader

56

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.


2
Questo non risponde alla domanda. striprimuove solo gli spazi bianchi iniziali
thelostspore

1
@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

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

29

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

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

qual è la differenza tra tr an replace?
Arnold Roa

replacecambia semplicemente la stringa in una nuova, come l'assegnazione di una variabile; mentre trè una ricerca e sostituzione globale carattere per carattere.
Mark Thomas

20

utilizzare chompo stripfunzioni da Ruby:

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

2
Questo non risponde alla domanda. striprimuove solo gli spazi bianchi iniziali
thelostspore

2
chomp è il modo migliore ... non posso credere che abbia così meno voti positivi
user1735921

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.