Expresión regular de Ruby usando gsub
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.
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.