Ruby dizesinin içinden “\ n” dizesini nasıl kaldırabilirim?


115

Bu dizeye sahibim:

"some text\nandsomemore"

"\ N" yi ondan kaldırmam gerekiyor. denedim

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

ama işe yaramıyor. Nasıl yaparım? Okuduğunuz için teşekkürler.

Yanıtlar:


172

Gsub'ınızda "\n"değil kullanmanız gerekir '\n'. Farklı tırnak işaretleri farklı davranır.

Çift tırnak ", karakter genişletmeye ve ifade enterpolasyonuna izin verir. \ngerçek değerlerini temsil etmek gibi kaçış kontrol karakterlerini kullanmanıza izin verirler, bu durumda, satırsonu ve #{expression}metin içinde istediğiniz herhangi bir yakut ifadesini ve değişkenleri örmek için kullanımına izin verirler .

Öte yandan, tek tırnaklar 'dizeyi tam anlamıyla ele alır, bu nedenle herhangi bir genişletme, değiştirme, enterpolasyon veya elinizde ne var.

Bu özel durumda, satırsonlarını silmek için ya .deleteda .trString yöntemini kullanmak daha iyidir .

Daha fazla bilgi için buraya bakın


17
uygun sözdizimi gerçekten .gsub (/ \ n /, "") olacaktır
boulder_ruby

2
@David doğru. Bununla birlikte, alıntıların bir fark yarattığını göstermenin önemli olduğunu hissettim, çünkü bu noktada Ben'e fayda sağlayacaktır. Dikkat et David, bu muhtemelen "doğru" dan çok bir stil meselesi. Şahsen trbu görev için daha iyi bir seçim olduğunu düşünüyorum , ancak dediğim gibi, cevap verdiğimde tek, çift tırnak arasındaki farkı belirtmenin daha iyi olacağını düşündüm.
ocodo

60

Bir dizeyi değiştirmek yerine kaldırmak istediğinizde String#delete(veya onun mutatör eşdeğerini String#delete!) kullanabilirsiniz, örneğin:

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

x şimdi "foofoo" ya eşittir

Bu özel durumda String#delete, gsubdizeyi gerçekte hiçbir şeyle değiştirmediğinizden daha okunabilir .


3
En azından Ruby 1.9.3'te, deleteburada belirtildiği gibi yıkıcı değildir. Yeni bir dize döndürür.
Brent Dillingham

İyi tespit edildi. String # delete! Mutator sürümünü kullanmak için bu kod parçacığını güncelledim! String # delete yerine
Paul Leader

56

Dizenizdeki tüm baştaki ve sondaki beyaz boşlukların kaldırılmasını istiyorsanız veya istemiyorsanız, stripyöntemi kullanabilirsiniz .

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

burada belirtildiği gibi .

düzenle Bu sorunun orijinal başlığı farklıydı. Cevabım orijinal soru için.


2
Bu soruya cevap vermiyor. stripyalnızca baştaki ve sondaki boşlukları kaldırır: ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore

1
@mvdanj Evet, bu özel sorunun ayrıntılarına bakıldığında, yanıt vermiyor, ancak soruyu yalnızca başlığa göre yanıtlıyor. Sanırım bu yüzden insanlar onu yararlı buldu.
ThomasW

Başlık, ilk cevapladığım zamandan beri değiştirildi.
ThomasW

29

Bunun için bir normal ifadeye ihtiyacınız yok. Tr kullanın:

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

tr an replace arasındaki fark nedir?
Arnold Roa

replacesadece dizeyi, değişken atama gibi yenisiyle değiştirir; oysa tr, karakter karakter global bul ve değiştir.
Mark Thomas

21

Ruby'den kullanım chompveya stripişlevler:

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

2
Bu soruya cevap vermiyor. stripyalnızca baştaki ve sondaki boşluğu
thelostspore

2
chomp en iyi yoldur ... bunun bu kadar az olumlu oy aldığına inanamıyorum
user1735921

chomp yönteminde, \ n ve \ r ortada değil, varsa str sonundan kaldırılır. Öyleyse bu OP sorusunu çözmez
silva96

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.