Soru Dize içinde birden çok boşluk ve yeni satırları kaldırın


Bunun gibi bir dize olduğunu varsayalım:

Hello, my\n       name is Michael.

Bu yeni çizgiyi nasıl çıkarabilirim ve bundan sonra bu boşlukları dizginin içine sokabilirim?

Hello, my name is Michael.

76
2017-08-18 11:50


Menşei




Cevaplar:


Rayları kontrol et squish yöntem:

http://apidock.com/rails/String/squish


148
2017-08-18 12:02



En basit ve en zarif çözüm. Teşekkürler. Ama bir şey var, bu yöntem Rails'te tanımlanmış, bu yüzden sadece Rails uygulamalarında çalışacağım, şans eseri benim durumum. - Kreeki
cool one :) hiç duymadım - fl00r
Kreeki biraz belirsiz olduğundan, bu bir Ruby yöntemi değil, bir Rails yöntemidir.
Rails olmayan bir içerik için some_string.strip.gsub(/\s+/, " ") tam olarak hangi squish yapar. - rapcal
Hepinize çok teşekkürler, çok havalı :) - Blue Smith


Yerleşik Rubileri göstermek için sıkmak:

string.gsub("\n", ' ').squeeze(' ')

33
2017-08-18 12:08



Sadece farkında olun: Sıkma, birden çok karakterin çalıştığı TÜM dizeleri sıkıştıracaktır. Yani "Uygulamamın kopyasını sıkıştır" ".squeeze =>" Uygulamamın kopyası kopyala " - charliepark
Fakat squeeze(' ') sadece boşlukları sıkıştırır. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy". - steenslag
Ah. İyi bir nokta! - charliepark


En basit yol muhtemelen

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."

17
2017-08-18 11:56



Oh, bu zor, ama bir çekicilik gibi çalışıyor. - Kreeki


my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )

4
2017-08-18 11:57



o da kaldırmak istiyorum \n İdeal olarak (hissediyorum) bir şey gibi bir boşluk ile değiştirilmelidir "Hello,\nMy name is Michael" - Ali
@Ali, bu doğru - fl00r


Bu regex 1 beyaz boşluklu 1 veya daha fazla beyaz alanın yerini alacak, ss \s içeren tüm beyaz boşluk karakterlerini değiştirir \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ')

Benzer şekilde sadece vagon dönüşü için

str.gsub!(/\n/, " ")

Önce hepsini değiştirin \n Beyaz boşluk ile, daha sonra çoklu beyaz boşluk regex'i kullanın.


4
2017-08-18 11:56



Teşekkürler! Bu, birden çok alanı kaldırmak, ancak kelimeler arasında tek boşluk tutmak için benim amacım için çalıştı. - acoustic_north


kullanım Dize # gsub:

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")

3
2017-08-18 11:56



durumunda çıktı doğru olmaz "Hello,\nMy name is Michael". İdeal olarak, orada bir alanın olmasını istersiniz. \n - Ali
Haklısın, düzeltdim. - Nikola


Bunu dene:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

3
2018-04-30 13:03



Zarif, teşekkür ederim! - Vlad
Bu aslında en iyi "sade yakut" cevabıdır ve çok satırlı dizgenin önündeki boşlukları sıyırmak için uygun şekilde çalışır. - Koen.


Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"

1
2017-12-20 05:24