質問

こんにちは私はRubyと正規表現が初めてです。正規表現を使用して、「02/02/1980」=> "2/2/1980」のようにフォーマットされた日付で月または日からゼロを削除しようとしています

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

この正規表現の何が問題になっていますか?

ありがとう。

役に立ちましたか?

解決

スラッシュで終わる部品の0を削除するだけです。

私のために働きます

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

出力

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

他のヒント

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

\b したがって、単語の境界のゼロ幅マーカーです。 \b0 ゼロの前に数字を持つことはできません。

これを行うことができるのに、なぜ正規表現を気にするのですか?

require "date"

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

試す /(?<!\d)0(\d)/

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

問題は、有効な日付と一致しないため、代替品が有効な文字列をマングルすることです。修正する:

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

置換: ''

Rubyは構文エラーを投げているので、Regexpに到達する前に問題があると言います。おそらくあなたが電話していないからです strftime 何でも。試す:

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

次に、時間をリアルタイムに置き換えてから、regexpをデバッグします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top