如何在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"