Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

340
Vistas
¿Cómo dividir cada 2 palabras en una cadena en una matriz - Ruby?

Quiero dividir una cadena en una matriz que incluya cada 2 palabras de la cadena original como se muestra a continuación:

 Ex: str = "how are you to day" output = ["how are", "are you", "you to", "to day"]

¿Alguien puede dar solución? ¡muchas gracias!

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Aporte

 str = "how are you to day"

Código

 p str.split(/\s/) .each_cons(2) .map { |str| str.join(" ") }

Producción

 ["how are", "are you", "you to", "to day"]
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay un enfoque, que utiliza un truco de expresiones regulares para duplicar la penúltima palabra en la cadena de entrada:

 input = "how are you to day" input = input.gsub(/(?<=\s)(\w+)(?=\s)/, "\\1 \\1") output = input.scan(/\w+ \w+/).flatten puts output

Esto imprime:

 how are are you you to to day
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay un par de formas de hacerlo. Ambos usan la forma de String#gsub que toma una expresión regular como argumento y ningún bloque, devolviendo un enumerador. Esta forma de gsub simplemente genera coincidencias de la expresión regular; no tiene nada que ver con el reemplazo de cadenas.

 str = "how are you to day"

Use una expresión regular que contenga una anticipación positiva

 r = /\w+(?=( \w+))/ str.gsub(r).with_object([]) { |s,a| a << s + $1 } #=> ["how are", "are you", "you to", "to day"]

He encadenado el enumerador str.gsub(r) a Enumerator#with_object . String#gsub es un reemplazo conveniente para String#scan cuando la expresión regular contiene grupos de captura. Consulte String#scan para obtener una explicación de cómo trata los grupos de captura.

Podemos escribir la expresión regular en modo de espacio libre para que se autodocumente.

 r = / \w+ # match >= 1 word characters (?= # begin a positive lookahead ( \w+) # match a space followed by >= 1 word characters and save # to capture group 1 ) # end positive lookahead /x # invoke free-spacing regex definition mode

Enumerar pares de palabras sucesivas en la picadura

 enum = str.gsub(/\w+/) loop.with_object([]) do |_,a| a << enum.next + ' ' + enum.peek end #=> ["how are", "are you", "you to", "to day"]

Consulte Enumerator#next y Enumerator#peek . Después de que next devuelva la última palabra en la cadena, se genera una StopIteration peek se maneja mediante loop saliendo del bucle y devolviendo la matriz a . Consulte Kernel#bucle .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda