Ruby字符串条定义字符
在Python中,我们可以使用字符串的方法删除所选字符的前导或尾随出现: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的方法不带参数,只带空格。
>>> 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"