İlk önce, gsub
ve gsub!
ile dikkatli olmanız gerekir. İkincisi "tehlikeli!" ve src
değerini değiştirecek. Bu ifadeleri sırayla yürütüyorsanız, a.gsub!(/a/, "b")
ve a = a.gsub(/a/, "b")
öğelerinin her ikisinin de a
ile aynı şeyi yapacağını unutmayın. Kodunuzdaki sorunun bir kısmı, src
'un değiştirilmekte olmasıdır.
src.gsub!(/\D/, "") # => "101"
src # => "101"
D yöntemi çalışmaz:
B yöntemi "his"
döndürür ama source
src[/([a-z]+)/] # => "his"
src # => "This Is A 101 Test"
hiçbir değişiklik yapmaz C yöntemi numaraları olmayan tüm karakterleri kaldırır çünkü sözdizimi yanlış. gsub
yöntemi, aramak için düzenli bir ifade/dize ve sonra değiştirmek için kullanılacak bir dize kabul eder. IRB'de denerseniz, bir yere daha /
ihtiyacınız olduğu gibi davranacaktır.
src.gsub(/(\W|\d)/, "") # => "This Is A Test" (note the two spaces)
src # => "This Is A 101 Test"
Bunu ""
döndürüyor işaret:
E metodu dışındaki tüm sözcük karakterleri ve tüm numaraları yerine geçer. Peki, aslında oluyor C ve D listelenen (sözdizimi sorunları düzeltildi) bu yıkıcı değişiklikler. E sadece "101"
çalıştırılıyor Yani ("101"
üzerinde çalıştırırsanız ikame yok gerçekleştirildi olarak Ayrıca, D aslında. nil
dönecektir) ve ""
ile olmayan tüm kelimeleri ve tüm sayılar değiştiriyoruz beri, bu "101"
olur .
src.gsub!(/\d\s?/, "") # => "This Is A Test"
src # => "This Is A Test"
Ve squeeze
oldukça etkilidir çünkü karakterler gibi birleştirerek en (çift boşluk tüm senaryolar ile başa çıkmak için benim favori, strip
geçerli:
aradığınız cevabı gibi bir şey olurdu oldukça sıyırma arka boşluktan etkin ve bu !
dönüş nil
onlar) bir yedek yaparsanız:
src = src.gsub(/\d+/, "").squeeze(" ").strip
yerinde. Teşekkürler! Rubular için –