Ответ 1
В рубине такого метода нет, но вы можете легко определить его как:
def my_strip(string, chars)
chars = Regexp.escape(chars)
string.gsub(/\A[#{chars}]+|[#{chars}]+\z/, "")
end
my_strip " [la[]la] ", " []"
#=> "la[]la"
В Python мы можем использовать метод .strip()
строки для удаления ведущих или завершающих вхождений выбранных символов:
>>> print " (Removes (only) leading & trailing brackets & ws ) ".strip(" ()")
'Removes (only) leading & trailing brackets & ws'
Как мы это делаем в Ruby? Ruby strip
метод не принимает аргументов и не пропускает только пробелы.
В рубине такого метода нет, но вы можете легко определить его как:
def my_strip(string, chars)
chars = Regexp.escape(chars)
string.gsub(/\A[#{chars}]+|[#{chars}]+\z/, "")
end
my_strip " [la[]la] ", " []"
#=> "la[]la"
"[[ ] foo [] boo ][ ]".gsub(/\A[ \[\]]+|[ \[\]]+\Z/,'')
=> "foo [] boo"
Может также сокращаться до
"[[ ] foo [] boo ][ ]".gsub(/\A[][ ]+|[][ ]+\Z/,'')
=> "foo [] boo"
В рубине такого метода нет, но вы можете легко определить его как:
class String
alias strip_ws strip
def strip chr=nil
return self.strip_ws if chr.nil?
self.gsub /^[#{Regexp.escape(chr)}]*|[#{Regexp.escape(chr)}]*$/, ''
end
end
Что удовлетворит запрошенные требования:
> "[ [] foo [] boo [][]] ".strip(" []")
=> "foo [] boo"
Пока вы делаете то, что ожидаете в менее экстремальных обстоятельствах.
> ' _bar_ '.strip.strip('_')
=> "bar"
NJoy!
Попробуйте метод String#delete
: (доступен в 1.9.3, не уверен в других версиях)
Пример:
1.9.3-p484 :003 > "hehhhy".delete("h")
=> "ey"
Попробуйте метод gsub:
irb(main):001:0> "[foo ]".gsub(/\As+[/,'')
=> "foo ]"
irb(main):001:0> "foo ]".gsub(/s+]\Z/,'')
=> "foo"
и др.