Saya memiliki string di Ruby:
sentence = "My name is Robert"
Bagaimana saya bisa mengganti satu kata dalam kalimat ini dengan mudah tanpa menggunakan kode kompleks atau loop?
ruby
ruby-on-rails-3
Mithun Sasidharan
sumber
sumber
my
)?Jawaban:
Tidak akan menimbulkan pengecualian jika kata yang diganti tidak ada dalam kalimat (
[]=
varian akan).Bagaimana cara mengganti semua instance?
Di atas hanya menggantikan contoh pertama dari "Robert".
Untuk mengganti semua instance gunakan
gsub
/gsub!
(mis. "Substitusi global"):Di atas akan menggantikan semua instance Robert dengan Joe.
sumber
Jika Anda berurusan dengan teks bahasa alami dan perlu mengganti kata, bukan hanya bagian dari string, Anda harus menambahkan sejumput ekspresi reguler ke gsub Anda karena subtitusi teks biasa dapat menyebabkan hasil yang merusak:
Ekspresi reguler memiliki batas kata, seperti
\b
yang cocok dengan awal atau akhir kata. Jadi,Di Ruby, tidak seperti beberapa bahasa lain seperti Javascript, batas kata kompatibel dengan UTF-8, jadi Anda dapat menggunakannya untuk bahasa dengan huruf Latin non-Latin atau diperpanjang:
sumber
\b
tidak berfungsi di dalamnya, Anda perlu menggunakan analisis morfologis atau hal-hal seperti itu dalam kasus tersebut. Juga, +1 untuk contoh lucu.Anda dapat mencoba menggunakan cara ini:
Maka kalimatnya akan menjadi:
sumber
IndexError
. Kalau tidak, kata yang bukan bagian dari kalimat akan mengarah ke:string not matched (IndexError)
Pertama, Anda tidak mendeklarasikan tipe dalam Ruby, jadi Anda tidak perlu yang pertama
string
.Untuk mengganti kata dalam string, Anda lakukan:
sentence.gsub(/match/, "replacement")
.sumber