我有几个看起来像这样的字符串:
"((String1))"
它们都是不同的长度。如何在循环中从所有这些字符串中删除括号?
Do as below using String#tr
:
"((String1))".tr('()', '')
# => "String1"
对于遇到这种情况并寻求性能的人来说,它看起来#delete
和#tr
速度差不多,比gsub
.
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
使用String#gsub
正则表达式:
"((String1))".gsub(/^\(+|\)+$/, '')
# => "String1"
"(((((( parentheses )))".gsub(/^\(+|\)+$/, '')
# => " parentheses "
这将仅删除周围的括号。
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '')
# => " This (is) string "
这是实现此目的的更短的方法:
1)使用Negative character class pattern matching
irb(main)> "((String1))"[/[^()]+/]
=> "String1"
^
- 匹配任何不在字符类中的东西。在 charachter 类中,我们(
有)
或者像其他人提到的那样使用全局替换“AKA:gsub”。
irb(main)> "((String1))".gsub(/[)(]/, '')
=> "String1"