Подтвердить что ты не робот

Как удалить определенные символы из строки в Ruby?

У меня есть несколько строк, которые выглядят так:

"((String1))"

Все они разные. Как я могу удалить круглые скобки из всех этих строк в цикле?

4b9b3361

Ответ 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"