Tengo varias cadenas que se ven así:
"((String1))"
Todos tienen diferentes longitudes. ¿Cómo podría eliminar los paréntesis de todas estas cadenas en un bucle?
Tengo varias cadenas que se ven así:
"((String1))"
Todos tienen diferentes longitudes. ¿Cómo podría eliminar los paréntesis de todas estas cadenas en un bucle?
Respuestas:
Haga lo siguiente usando String#tr
:
"((String1))".tr('()', '')
# => "String1"
tr!
que modificará una cadena en el lugar, comomy_string.tr!(')(','')
Si solo desea eliminar los dos primeros caracteres y los dos últimos, puede usar índices negativos en la cadena:
s = "((String1))"
s = s[2...-2]
p s # => "String1"
Si desea eliminar todos los paréntesis de la cadena, puede usar el método de eliminación en la clase de cadena:
s = "((String1))"
s.delete! '()'
p s # => "String1"
Usando String#gsub
con expresión regular:
"((String1))".gsub(/^\(+|\)+$/, '')
# => "String1"
"(((((( parentheses )))".gsub(/^\(+|\)+$/, '')
# => " parentheses "
Esto eliminará solo los paréntesis que rodean.
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '')
# => " This (is) string "
Para aquellos que se encuentran con esto y buscan rendimiento, parece #delete
y #tr
son aproximadamente iguales en velocidad y 2-4 veces más rápidos que 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
Aquí hay una forma aún más corta de lograr esto:
1) usando Negative character class pattern matching
irb(main)> "((String1))"[/[^()]+/]
=> "String1"
^
- Coincide con cualquier cosa que NO esté en la clase de personaje. Dentro de la clase charachter, tenemos (
y)
O con sustitución global "AKA: gsub" como otros han mencionado.
irb(main)> "((String1))".gsub(/[)(]/, '')
=> "String1"
((a))b
. El primero solo regresará a
, el segundo regresaráab