Ruby'de bir dizem var:
sentence = "My name is Robert"
Karmaşık kod veya döngü kullanmadan bu cümledeki herhangi bir kelimeyi nasıl kolayca değiştirebilirim?
Ruby'de bir dizem var:
sentence = "My name is Robert"
Karmaşık kod veya döngü kullanmadan bu cümledeki herhangi bir kelimeyi nasıl kolayca değiştirebilirim?
Yanıtlar:
sentence.sub! 'Robert', 'Joe'
Değiştirilen kelime cümle içinde değilse istisnaya neden olmaz ( []=
varyant irade).
Yukarıdaki sadece "Robert" ın ilk örneğinin yerine geçer.
Tüm örnekleri değiştirmek için gsub
/ gsub!
(yani. "Global değiştirme") kullanın:
sentence.gsub! 'Robert', 'Joe'
Yukarıdakiler, Robert'ın tüm örneklerini Joe ile değiştirecek.
Doğal dil metni ile uğraşıyorsanız ve sadece bir dizenin bir parçası değil, bir kelimeyi değiştirmeniz gerekiyorsa, düz metin ikamesi felaketle sonuçlanabileceğinden, gsub'ınıza bir tutam düzenli ifade eklemeniz gerekir:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
Normal ifadeler, bir kelimenin \b
başlangıcı veya sonu ile eşleşen kelime sınırlarına sahiptir. Böylece,
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
Ruby'de, Javascript gibi diğer dillerden farklı olarak, kelime sınırları UTF-8 ile uyumludur, bu yüzden Latince olmayan veya genişletilmiş Latin alfabesi olan diller için kullanabilirsiniz:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
bu alanlarda çalışmadığını, bu durumlarda morfolojik analizörler veya bunun gibi şeyler kullanmanız gerektiğini unutmayın. Ayrıca, komik örnek için +1.
Bu şekilde kullanmayı deneyebilirsiniz:
sentence ["Robert"] = "Roger"
Sonra cümle:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
. Aksi takdirde cümlenin bir parçası olmayan bir kelime için:string not matched (IndexError)
my
) değiştirilsin mi?