Pregunta

Hola, soy nuevo en Ruby y expresiones regulares. Estoy tratando de usar una expresión regular para eliminar cualquier ceros del mes o el día en una fecha formateada como "02/02/1980" => "2/2/1980"

def m_d_y
  strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end

¿Qué hay de malo en esta expresión regular?

Gracias.

¿Fue útil?

Solución

Simplemente puede eliminar 0s en partes que terminan con una barra.

Funciona para mi

require "date"

class Date
    def m_d_y
      strftime('%m/%d/%Y').gsub(/0(\d)\//, "\\1/")
    end
end

puts Date.civil(1980, 1, 1).m_d_y
puts Date.civil(1980, 10, 1).m_d_y
puts Date.civil(1980, 1, 10).m_d_y
puts Date.civil(1908, 1, 1).m_d_y
puts Date.civil(1908, 10, 1).m_d_y
puts Date.civil(1908, 1, 10).m_d_y

salidas

1/1/1980
10/1/1980
1/10/1980
1/1/1908
10/1/1908
1/10/1908

Otros consejos

"02/02/1980".gsub(/\b0/, '') #=> "2/2/1980"

\b es un marcador de ancho cero para un límite de palabra, por lo tanto \b0 no puede tener un dígito antes del cero.

¿Por qué molestarse con Regex cuando puedes hacer esto?

require "date"

class Date
    def m_d_y
      [mon, mday, year].join("/")
    end
end

Probar /(?<!\d)0(\d)/

"02/02/1980".gsub(/(?<!\d)0(\d)/,$1)
=> "2/2/1980"

El problema es que no coincidirá con las fechas válidas para que su reemplazo mangle las cadenas válidas. Arreglar:

Regex: (^|(?<=/))0

Reemplazo: ''

Usted dice que Ruby está lanzando un error de sintaxis, por lo que su problema se encuentra antes de haber alcanzado el Regexp. Probablemente porque no estás llamando strftime en cualquier cosa. Probar:

def m_d_y
  t = Time.now
  t.strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end

Luego reemplace la hora. Ahora con tiempo real, luego depire su regexp.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top