我有几个看起来像这样的字符串:
"((String1))"
它们的长度各不相同。如何在循环中从所有这些字符串中删除括号?
答案 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"