質問
こんにちは私は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をデバッグします。
所属していません StackOverflow