Это удалит все круглые скобки, даже те, которые находятся в середине строки, что (по-видимому) не то, что хочет OP. Если это то, что нужно, это наиболее элегантное решение.
Восстановить Монику - notmaynard
22
Для тех , кто прибывает через это и ищет производительность, похоже , #deleteи #trпримерно такой же скорости и 2-4x быстрее gsub.
Четыре года спустя ... :-) Я обнаружил, что если я увеличу ваш бенчмаркинг на пару порядков (1_000_000 запусков), то с тем же кодом, который вы используете выше, я действительно получаю удаление, работающее немного быстрее, чем tr, с удалением примерно отношение tr 0,92, а gsub чуть меньше 1,5x удаления (фактически ~ 1,46 удаления и ~ 1,39 tr). ymmv конечно. Это на Ruby 2.6.3 на MBP 13 2018 года. Спасибо за тестирование этих трех методов!
Ответы:
Сделайте, как показано ниже, используя
String#tr
:"((String1))".tr('()', '') # => "String1"
источник
tr!
, которая изменяет строку на месте, напримерmy_string.tr!(')(','')
Если вы просто хотите удалить первые два символа и последние два, вы можете использовать отрицательные индексы в строке:
s = "((String1))" s = s[2...-2] p s # => "String1"
Если вы хотите удалить все круглые скобки из строки, вы можете использовать метод удаления для класса строки:
s = "((String1))" s.delete! '()' p s # => "String1"
источник
Для тех , кто прибывает через это и ищет производительность, похоже ,
#delete
и#tr
примерно такой же скорости и 2-4x быстрее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
источник
Использование
String#gsub
с регулярным выражением:"((String1))".gsub(/^\(+|\)+$/, '') # => "String1" "(((((( parentheses )))".gsub(/^\(+|\)+$/, '') # => " parentheses "
Это удалит только круглые скобки.
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '') # => " This (is) string "
источник
Вот еще более короткий способ добиться этого:
1) используя
Negative character class pattern matching
irb(main)> "((String1))"[/[^()]+/] => "String1"
^
- Соответствует чему-либо НЕ в классе символов. Внутри класса charachter у нас есть(
и)
Или с глобальной заменой «AKA: gsub», как упоминали другие.
irb(main)> "((String1))".gsub(/[)(]/, '') => "String1"
источник
((a))b
. Первый только вернетсяa
, второй вернетсяab