/ / ¿Cómo uso String.delete para eliminar '<em>' de una cadena en Ruby? - rubí

¿Cómo uso String.delete para eliminar '<em>' de una cadena en Ruby? - rubí

Estoy seguro de que puedo hacer esto con una expresión regular, pero no puedo encontrar ninguna explicación para este comportamiento usando solo lo normal delete!:

#1.9.2
>> "helllom<em>".delete!"<em>"
=> "hlllo"

Los docs No tengo nada que decir sobre esto. Me parece que está tratando "<em>" como conjunto. ¿Dónde se documenta esto?

Editar: en mi defensa, estaba buscando un tratamiento especial de <y> en los documentos bajo eliminar. No vi nada al respecto e intenté con Google, que tampoco tuvo nada que decir al respecto, porque no existe.

Respuestas

4 para la respuesta № 1

String#delete Es uno de esos métodos desafortunados que es difícil de explicar (no tengo idea de cuál es el caso de uso). En la práctica, siempre he usado gsub con una cadena vacía como segundo argumento.

"helllom<em>".gsub "<em>", "" # => "helllom"

Tenga en cuenta que String#gsub! También tiene rarezas tales que no debe depender de su valor de retorno, devolverá nil Si no altera la cadena, entonces es mejor usar gsub Si depende del valor de retorno, o si desea mutar la cadena, utilice gsub! pero y no uses nada más en esa línea.


2 para la respuesta № 2

No puede utilizar String # delete para eliminar subcadenas.

Comprobar el API. Elimina todos los caracteres de los parámetros dados de la cadena dada.

Yo su caso elimina todas las apariciones de e, m, < y >.


0 para la respuesta № 3

Directamente de la documentación:

delete([other_str]+) → new_str

Devuelve una copia de str con todos los caracteres en la intersección de su argumentos eliminados. Utiliza las mismas reglas para construir el conjunto de caracteres como String # count.

ex:

"hello".delete "l","lo"        #=> "heo"
"hello".delete "lo"            #=> "he"
"hello".delete "aeiou", "^e"   #=> "hell"
"hello".delete "ej-m"          #=> "ho"

Así que todos los caracteres en la intersección de las dos cadenas se eliminan.