Ruby string strip определенные символы - PullRequest
17 голосов
/ 02 июля 2010

В Python мы можем использовать метод строки .strip() для удаления начальных или конечных вхождений выбранных символов:

>>> <b>print " (Removes (only) leading & trailing brackets & ws ) ".strip(" ()")</b>
'Removes (only) leading & trailing brackets & ws'

Как мы это делаем в Ruby?Метод Ruby strip не принимает аргументов и удаляет только пробелы.

Ответы [ 5 ]

13 голосов
/ 02 июля 2010

В ruby ​​такого метода нет, но вы можете легко определить его следующим образом:

def my_strip(string, chars)
  chars = Regexp.escape(chars)
  string.gsub(/\A[#{chars}]+|[#{chars}]+\z/, "")
end

my_strip " [la[]la] ", " []"
#=> "la[]la"
3 голосов
/ 02 июля 2010
"[[ ] foo [] boo ][ ]".gsub(/\A[ \[\]]+|[ \[\]]+\Z/,'') 
=> "foo [] boo"

Также может быть сокращен до

"[[ ] foo [] boo ][ ]".gsub(/\A[][ ]+|[][ ]+\Z/,'') 
=> "foo [] boo"
2 голосов
/ 08 июля 2013

В ruby ​​такого метода нет, но вы можете легко определить его следующим образом:

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!

1 голос
/ 31 января 2014

Попробуйте метод String#delete: (доступно в 1.9.3, не уверен в других версиях)

Пример:

    1.9.3-p484 :003 > "hehhhy".delete("h")
     => "ey"
1 голос
/ 02 июля 2010

Попробуйте метод gsub :

irb(main):001:0> "[foo ]".gsub(/\As+[/,'')
=> "foo ]"

irb(main):001:0> "foo ]".gsub(/s+]\Z/,'')
=> "foo"

и т.д.

...