如何在Ruby中修剪字符串中的特定字符?

时间:2013-10-28 14:39:38

标签: ruby string trim

我有几个看起来像这样的字符串:

"((String1))"

它们的长度各不相同。如何在循环中从所有这些字符串中删除括号?

5 个答案:

答案 0 :(得分:142)

使用String#tr执行以下操作:

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

答案 1 :(得分:35)

如果您只想删除前两个字符和后两个字符,那么您可以在字符串上使用negative indexes

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

如果要从字符串中删除所有括号,可以在字符串类上使用delete方法:

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

答案 2 :(得分:16)

String#gsub与正则表达式一起使用:

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

这将仅删除周围的括号。

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

答案 3 :(得分:11)

对于遇到这种情况并寻找效果的人来说,#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

答案 4 :(得分:1)

这是实现这一目标的更短途径:

1)使用Negative character class pattern matching

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

^ - 匹配字符类中没有的任何内容。在charachter课程中,我们有()

或者像其他人提到的全球替代“AKA:gsub”。

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