Ruby expression régulière en utilisant gsub
Question
Salut je suis nouveau à Ruby et des expressions régulières. Je suis en train d'utiliser une expression régulière pour éliminer les zéros du mois ou le jour à une date formatée comme « 02/02/1980 » => « 02/02/1980 »
def m_d_y
strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end
Quel est le problème avec cette expression régulière?
Merci.
La solution
Vous pouvez simplement supprimer 0s dans les parties qui se termine par une barre oblique.
Travaux pour moi
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
sorties
1/1/1980
10/1/1980
1/10/1980
1/1/1908
10/1/1908
1/10/1908
Autres conseils
"02/02/1980".gsub(/\b0/, '') #=> "2/2/1980"
\b
est un marqueur de longueur nulle pour une limite de mot, donc \b0
ne peut pas avoir un chiffre avant le zéro.
Pourquoi prendre la peine avec regex quand vous pouvez le faire?
require "date"
class Date
def m_d_y
[mon, mday, year].join("/")
end
end
Essayez /(?<!\d)0(\d)/
"02/02/1980".gsub(/(?<!\d)0(\d)/,$1)
=> "2/2/1980"
Le problème est qu'il ne correspond pas à des dates valides afin que votre remplacement mutiler les chaînes valides. Pour résoudre:
Regex: (^|(?<=/))0
Remplacement: ''
Vous dites que Ruby est de lancer une erreur de syntaxe, de sorte que votre problème est avant même d'avoir atteint le regexp. Probablement parce que vous n'êtes pas appeler strftime
sur quoi que ce soit. Essayez:
def m_d_y
t = Time.now
t.strftime('%m/%d/%Y').gsub(/0?(\d{1})\/0?(\d{1})\//, $1 + "/" + $2 + "/" )
end
Remplacez ensuite Time.now avec un temps réel, puis déboguer votre expression rationnelle.