2008-12-16 14 views
19

¿Cómo puedo eliminar el primer "1" de cualquier cadena si esa cadena comienza con un "1"?Eliminar el carácter de la cadena si comienza con ese carácter?

"1hello world" => "hello world" 
"112345" => "12345" 

estoy pensando en hacer

string.sub!('1', '') if string =~ /^1/ 

pero estoy preguntando que hay una manera mejor. ¡Gracias!

+0

Posible duplicado de [¿Cuál es la forma más fácil de quitar el primer carácter de una cadena?] (https: // stackoverflow.com/questions/3614389/what-is-the-easiest-way-to-remove-the-first-character-from-a-string) – SRack

Respuesta

31

¿Por qué no incluir la expresión regular en el método sub!?

string.sub!(/^1/, '') 
7

si se va a utilizar expresiones regulares para el partido, usted puede también utilizar para la sustitución

string.sub!(%r{^1},"") 

Por cierto, el %r{} es sólo una sintaxis alternativa para las expresiones regulares. Puede usar% r seguido de cualquier carácter, p. %r!^1!.

+1

"Por cierto, la sintaxis% r {} para expresiones regulares le permite evitar el escape/dentro de la expresión ". - Pero ahora tienes dos personajes que necesitas escapar en lugar de uno, pero el punto es discutible ya que ninguno de los personajes en cuestión aparece en el patrón. –

+0

Es solo una preferencia subjetiva. Yo diría que/es un personaje más común que cualquiera de {}. Mi BTW era una explicación en caso de que el OP no hubiera visto la sintaxis% r {} antes. –

1

¡Cuidado al usar sub!(/^1/,'')! En caso de que la cadena no coincida con /^1/, devolverá nil. Probablemente deberías usar sub (sin la explosión).

+0

No, * devolverá * nil en ese caso, pero la cadena original permanecerá sin cambios. Si solo usa 'sub', tendrá que hacer la cadena más larga = string.sub (/^/, ''). –

0

me gustaría poder escribir una pequeña mejora en el por lo demás excelente respuesta por Zach. El ^ coincide con el comienzo de cada línea en Ruby regex. Esto significa que puede haber múltiples coincidencias por cadena. Kenji le preguntó sobre el principio de la cadena, que significa que tienen que usar esta expresión regular en su lugar:

string.sub!(/\A1/, '') 

Compare this - multiple matches con this - one match.

1

A partir de Ruby 2.5 puede usar delete_prefix o delete_prefix! para lograr esto de una manera legible

En este caso "1hello world".delete_prefix("1").

Más información aquí:

https://blog.jetbrains.com/ruby/2017/10/10-new-features-in-ruby-2-5/

https://bugs.ruby-lang.org/issues/12694

'invisible'.delete_prefix('in') #=> "visible" 
'pink'.delete_prefix('in') #=> "pink" 

N. B. ¡también puede usar esto para eliminar elementos del final de una cadena con delete_suffix y delete_suffix!

'worked'.delete_suffix('ed') #=> "work" 
'medical'.delete_suffix('ed') #=> "medical" 

https://bugs.ruby-lang.org/issues/13665

he respondido en un poco más de detalle (con puntos de referencia) aquí: What is the easiest way to remove the first character from a string?

Cuestiones relacionadas