У меня есть несколько строк, которые выглядят так:
"((String1))"
Все они разной длины. Как я мог убрать круглые скобки со всех этих строк в цикле?
У меня есть несколько строк, которые выглядят так:
"((String1))"
Все они разной длины. Как я мог убрать круглые скобки со всех этих строк в цикле?
Ответы:
Сделайте, как показано ниже, используя 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