Frage

Hallo, ich bin neu in Ruby und reguläre Ausdrücke. Ich versuche, einen regulären Ausdruck zu verwenden, um Nullen aus dem Monat oder Tag in einem Datum zu entfernen, das wie "02/02/1980" => "2/2/1980" formatiert ist.

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

Was ist los mit diesem regulären Ausdruck?

Vielen Dank.

War es hilfreich?

Lösung

Sie können einfach die 0s in Teilen entfernen, die mit einem Schrägstrich endet.

Funktioniert bei mir

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

Ausgänge

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

Andere Tipps

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

\b ist daher ein Breitenmarker für eine Wortgrenze \b0 kann vor der Null keine Ziffer haben.

Warum sich mit Regex beschäftigen, wenn Sie das tun können?

require "date"

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

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

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

Das Problem ist, dass es keine gültigen Daten übereinstimmt, sodass Ihr Ersatz gültige Zeichenfolgen mangiert. Reparieren:

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

Ersatz: ''

Sie sagen, dass Ruby einen Syntaxfehler wirft, daher liegt Ihr Problem, bevor Sie das Regexp überhaupt erreicht haben. Wahrscheinlich, weil Sie nicht anrufen strftime auf alles. Versuchen:

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

Ersetzen Sie dann die Zeit. Now mit einer Echtzeit und debuggen Sie dann Ihren Regexp.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top