Ruby字符串条定义字符

Ruby字符串条定义字符,ruby,string,strip,Ruby,String,Strip,在Python中,我们可以使用字符串的方法删除所选字符的前导或尾随出现: >>> print " (Removes (only) leading & trailing brackets & ws ) ".strip(" ()") 'Removes (only) leading & trailing brackets & ws' >>打印“(仅删除前导和尾随括号&ws)”.strip(“()”) '删除(仅)前括号和后括号&ws' 我们如何在Ruby中实现这一点?Ruby的方法不带参数,只带空格。

在Python中,我们可以使用字符串的方法删除所选字符的前导或尾随出现:

>>> print " (Removes (only) leading & trailing brackets & ws ) ".strip(" ()")
'Removes (only) leading & trailing brackets & ws'
>>打印“(仅删除前导和尾随括号&ws)”.strip(“()”)
'删除(仅)前括号和后括号&ws'
我们如何在Ruby中实现这一点?Ruby的方法不带参数,只带空格。

尝试以下方法:


等等。

ruby中没有这样的方法,但您可以很容易地定义它,如:

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

my_strip " [la[]la] ", " []"
#=> "la[]la"
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 ][ ]".gsub(/\A[][ ]+|[][ ]+\Z/,'') 
=> "foo [] boo"

ruby中没有这样的方法,但您可以像这样轻松地定义它:

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

my_strip " [la[]la] ", " []"
#=> "la[]la"
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"
哎呀

尝试
String#delete
方法:(在1.9.3中可用,不确定其他版本)

例:


与所有其他答案一样,这将删除给定字符的所有匹配项。OP只想删除字符串两端的匹配项(如strip,但不仅仅是空格)。哎呀,think^匹配了字符串的开头。@Peter:我实际上没有看到^(可能是因为它在洞口前面而不是后面)。但是
\A
更正确,是的+1在
[[]foo[]boo[][]上尝试此操作
。您的正则表达式将返回不变的字符串,因为它们依赖于特定的字符顺序。另外,在Python中还有一个“\`缺少。不,在Python中”[[]foo[]boo[]boo[]]”。strip([])
返回
“foo[]boo”
+1:我喜欢这样。它看起来也像是自动转义正则表达式元字符,对吗?如果只是字符串替换,那么在您的示例中正则表达式不应该起作用。但是,您可能希望使用
\A
\Z
而不是
^
$
——后者也将匹配可能不需要的换行符。@Tim:
{}
不会转义-这就是为什么我在其中调用Regexp.escape的原因。关于\A和\Z的观点很好。我的错-(wer lesen kann,ist klar im Vorteil)。谢谢,刚才添加了:
返回字符串,除非在函数开始处使用字符串和字符来处理两个输入的nil。这不是问题的目的。
    1.9.3-p484 :003 > "hehhhy".delete("h")
     => "ey"