如何在Ruby中修改string中的特定字符?

我有几个string,看起来像这样:

"((String1))" 

他们都是不同的长度。 我怎么能从循环中的所有这些string中删除括号?

使用String#tr如下操作:

  "((String1))".tr('()', '') # => "String1" 

如果您只想删除前两个字符和最后两个字符,则可以在string上使用负数索引 :

 s = "((String1))" s = s[2...-2] ps # => "String1" 

如果你想从string中删除所有括号,你可以使用string类的delete方法:

 s = "((String1))" s.delete! '()' ps # => "String1" 

使用带正则expression式的String#gsub

 "((String1))".gsub(/^\(+|\)+$/, '') # => "String1" "(((((( parentheses )))".gsub(/^\(+|\)+$/, '') # => " parentheses " 

这将只删除周围的括号。

 "(((((( This (is) string )))".gsub(/^\(+|\)+$/, '') # => " This (is) string " 

对于那些正在寻找性能的人来说,看起来#delete#tr在速度上大致相同,比gsub快2-4倍。

 text = "Here is a string with / some forwa/rd slashes" tr = Benchmark.measure { 10000.times { text.tr('/', '') } } # tr.total => 0.01 delete = Benchmark.measure { 10000.times { text.delete('/') } } # delete.total => 0.01 gsub = Benchmark.measure { 10000.times { text.gsub('/', '') } } # gsub.total => 0.02 - 0.04 

这是实现这个目标的更简单的方法:

1)使用Negative character class pattern matching

 irb(main)> "((String1))"[/[^()]+/] => "String1" 

^ – 匹配任何不在字符类中的东西。 在charachter类中,我们有()

或者像其他人一样提到“AKA:gsub”。

 irb(main)> "((String1))".gsub(/[)(]/, '') => "String1"