2010-07-02 3 views
14

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

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

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

ответ

11

Там нет такого метода в рубин, но вы можете легко определить это нравится:

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

my_strip " [la[]la] ", " []" 
#=> "la[]la" 
+0

+1: Мне это нравится. Он также выглядит так: '# {chars}' автоматически сдерживает метасимволы регулярного выражения - это правильно? Если это была просто замена строки, регулярное выражение не должно работать в вашем примере. Однако вы можете использовать '\ A' и' \ Z' вместо '^' и '$' - последние будут также совпадать с новыми символами, которые могут быть нежелательными. –

+0

@Tim: '# {}' не убегает - вот почему у меня есть вызов Regexp.escape. Хороший вопрос о \ A и \ Z. – sepp2k

+0

Ох. Моя вина - (wer lesen kann, ist klar im Vorteil). –

0

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

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

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

т.д.

+1

Это, как и все другие ответы, удаляет все вхождения заданных символов. OP только хочет удалить вхождения в любом конце строки (например, strip, но не только для пробелов). – sepp2k

+0

Упс, думал, что^соответствует началу строки. Изменено. – Peter

+0

@Peter: Я действительно не видел^(возможно, потому, что он был перед открытием '/' вместо него). Но '\ A' вернее, да. +1 – sepp2k

3
"[[ ] foo [] boo ][ ]".gsub(/\A[ \[\]]+|[ \[\]]+\Z/,'') 
=> "foo [] boo" 
Может

также сокращаться до

"[[ ] foo [] boo ][ ]".gsub(/\A[][ ]+|[][ ]+\Z/,'') 
=> "foo [] boo" 
2

Там нет такого метода в рубин, но вы можете легко определить это нравится:

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!

2

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

Ex:

1.9.3-p484 :003 > "hehhhy".delete("h") 
    => "ey" 
+6

Это не то, о чём задавался вопрос. –

Смежные вопросы