una separate salto regulares rails que linea interpolar hacer expresiones concatenacion como cadena ruby string

separate - Conversión de cadena de mayúsculas en mayúsculas con Ruby



ruby class string (9)

Intento convertir una cadena en mayúsculas en Ruby en minúsculas, pero con el primer carácter de cada palabra en mayúscula. Ejemplo:

convierte "MI CADENA AQUÍ" en "Mi cadena aquí".

Sé que puedo usar el método .downcase, pero eso haría que todo esté en minúsculas ("mi cadena aquí"). Estoy escaneando todas las líneas en un archivo y haciendo este cambio, entonces ¿hay alguna expresión regular que pueda usar a través de Ruby para lograr esto?

¡Gracias!


Al tratar de encontrar mi propio método (incluido a continuación para referencia), me di cuenta de que hay algunos casos de esquina bastante desagradables. Mejor solo usa el método ya provisto en Facets , el más asombroso evasor de la biblioteca de Ruby:

require ''facets/string/titlecase'' class String def titleize split(/(/W)/).map(&:capitalize).join end end require ''test/unit'' class TestStringTitlecaseAndTitleize < Test::Unit::TestCase def setup @str = "i just saw /"twilight: new moon/", and man! it''s crap." @res = "I Just Saw /"Twilight: New Moon/", And Man! It''s Crap." end def test_that_facets_string_titlecase_works assert_equal @res, @str.titlecase end def test_that_my_own_broken_string_titleize_works assert_equal @res, @str.titleize # FAIL end end

Si desea algo que cumpla más con las pautas de estilo de escritura típicas (es decir, no usa mayúsculas en palabras como "y"), hay un par de gemas "titleize" en GitHub.


De ActiveSupport

"MY STRING HERE".gsub(//b(''?[a-z])/) { $1.capitalize }

Si está utilizando Rails / ActiveSupport, el método ya está disponible de forma gratuita.


Intenté mejorar el código ... listo para críticas y sugerencias.

class Book attr_accessor :title def title=(new_title) notcap=%w(and the a in of an) str='''' new_title.gsub(/(/w|/s)/w+/) do |word| word.strip! if not notcap.include? word word.capitalize! end str += '' '' + word end str.strip! str = str[0].upcase + str[1..-1] @title = str end end


Portada de Unicode-aware para Ruby 2.4.0+:

class String def titlecase split(/([[:alpha:]]+)/).map(&:capitalize).join end end

>> "я только что посмотрел /"леди исчезает/", и это чума!".titlecase => "Я Только Что Посмотрел /"Леди Исчезает/", И Это Чума!"

(basado en https://.com/a/1792102/788700 )


Si está utilizando Rails (realmente todo lo que necesita es ActiveSupport, que es parte de Rails), puede usar titleize :

"MY STRING HERE".titleize # => "My String Here"


Usa mayúsculas en cada palabra en una oración usando ruby, sin expresiones regulares ... porque desafortunadamente esas me asustan

class Book attr_accessor :title def title=(new_title) result = [] words = new_title.split('' '') words.each do |word| capitalized = word[0].upcase + word[1..word.length].downcase result.push(capitalized) end @title = result.join('' '') end end


"HELLO WORLD HOW ARE YOU".gsub(//w+/) do |word| word.capitalize end #=> "Hello World How Are You"



string = "MY STRING HERE" string.split(" ").map {|word| word.capitalize}.join(" ")

La forma en que esto funciona: El .split(" ") divide en espacios, por lo que ahora tenemos una matriz que se parece a ["my", "string", "here"] . La llamada de map itera sobre cada elemento de la matriz, asignándola a una word variable temporal, que luego llamaremos capitalize . Ahora tenemos una matriz que se parece a ["My", "String", "Here"] , y finalmente volvemos a convertir esa matriz en una cadena join cada elemento con un espacio ("").