Как удалить определенные символы из строки в Ruby? У меня есть несколько строк, которые выглядят так: "((String1))" Все они разные. Как я могу удалить круглые скобки из всех этих строк в цикле? Ответ 1 Сделайте, как показано ниже, String#tr: "((String1))".tr('()', '') # => "String1" Ответ 2 Если вы просто хотите удалить первые два символа и последние два, вы можете использовать отрицательные индексы в строке: s = "((String1))" s = s[2...-2] p s # => "String1" Если вы хотите удалить все круглые скобки из строки, вы можете использовать метод delete в классе строк: s = "((String1))" s.delete! '()' p s # => "String1" Ответ 3 Используя String#gsub с регулярным выражением: "((String1))".gsub(/^\(+|\)+$/, '') # => "String1" "(((((( parentheses )))".gsub(/^\(+|\)+$/, '') # => " parentheses " Это приведет к удалению только окружных круглых скобок. "(((((( This (is) string )))".gsub(/^\(+|\)+$/, '') # => " This (is) string " Ответ 4 Для тех, кто сталкивается с этим и ищет производительность, похоже, что #delete и #tr примерно одинаковы по скорости и на 2-4 раза быстрее, чем 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 Ответ 5 Вот еще более короткий способ добиться этого: 1), используя Negative character class pattern matching irb(main)> "((String1))"[/[^()]+/] => "String1" ^ - Соответствует чему-либо НЕ в классе символов. Внутри класса charachter имеем ( и ) Или с глобальной заменой "AKA: gsub", как и другие. irb(main)> "((String1))".gsub(/[)(]/, '') => "String1"
Ответ 2 Если вы просто хотите удалить первые два символа и последние два, вы можете использовать отрицательные индексы в строке: s = "((String1))" s = s[2...-2] p s # => "String1" Если вы хотите удалить все круглые скобки из строки, вы можете использовать метод delete в классе строк: s = "((String1))" s.delete! '()' p s # => "String1"
Ответ 3 Используя String#gsub с регулярным выражением: "((String1))".gsub(/^\(+|\)+$/, '') # => "String1" "(((((( parentheses )))".gsub(/^\(+|\)+$/, '') # => " parentheses " Это приведет к удалению только окружных круглых скобок. "(((((( This (is) string )))".gsub(/^\(+|\)+$/, '') # => " This (is) string "
Ответ 4 Для тех, кто сталкивается с этим и ищет производительность, похоже, что #delete и #tr примерно одинаковы по скорости и на 2-4 раза быстрее, чем 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
Ответ 5 Вот еще более короткий способ добиться этого: 1), используя Negative character class pattern matching irb(main)> "((String1))"[/[^()]+/] => "String1" ^ - Соответствует чему-либо НЕ в классе символов. Внутри класса charachter имеем ( и ) Или с глобальной заменой "AKA: gsub", как и другие. irb(main)> "((String1))".gsub(/[)(]/, '') => "String1"