Saya memiliki beberapa string yang terlihat seperti ini:
"((String1))"
Mereka semua panjang yang berbeda. Bagaimana aku bisa menghapus tanda kurung dari semua string ini dalam loop?
Jika anda hanya ingin menghapus dua karakter pertama dan terakhir, maka anda dapat menggunakan negatif indeks pada string:
s = "((String1))"
s = s[2...-2]
p s # => "String1"
Jika anda ingin menghapus semua tanda kurung dari string anda dapat menggunakan delete metode pada class string:
s = "((String1))"
s.delete! '()'
p s # => "String1"
Menggunakan String#gsub
dengan ekspresi reguler:
"((String1))".gsub(/^\(+|\)+$/, '')
# => "String1"
"(((((( parentheses )))".gsub(/^\(+|\)+$/, '')
# => " parentheses "
Ini akan menghapus sekitarnya kurung saja.
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '')
# => " This (is) string "
Bagi mereka yang datang di ini dan mencari kinerja, sepertinya #menghapus
dan #tr
adalah tentang yang sama dalam kecepatan dan 2-4x lebih cepat dari gsub
.
text = "Here is a string with / some forwa/rd slashes"
tr = Benchmark.measure { 10000.times { text.tr('/', '') } }
# tr.total => 0.01
delete = Benchmark.measure { 10000.times { text.delete('/') } }
# delete.total => 0.01
gsub = Benchmark.measure { 10000.times { text.gsub('/', '') } }
# gsub.total => 0.02 - 0.04
Berikut ini adalah cara yang lebih singkat untuk mencapai ini:
karakter Negatif kelas pencocokan pola
irb(main)> "((String1))"[/[^()]+/]
=> "String1"
^
- Cocok apa TIDAK di kelas karakter. Dalam charachter kelas, kami memiliki (
dan )
Atau dengan global substitusi "ALIAS: gsub" seperti orang lain telah disebutkan.
irb(main)> "((String1))".gsub(/[)(]/, '')
=> "String1"