2

Hi I'm new to Ruby and regular expressions. I'm trying to use a regular expression to remove any zeros from the month or day in a date formatted like "02/02/1980" => "2/2/1980"

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

What is wrong with this regular expression?

Thanks.

4

6 に答える 6

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

\bは単語境界のゼロ幅マーカーであるため\b0、ゼロの前に数字を含めることはできません。

于 2010-02-06T18:05:51.700 に答える
2

スラッシュで終わる部分の 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
于 2010-02-06T08:58:20.183 に答える
2

これができるのに、なぜわざわざ正規表現を使うのでしょうか?

require "date"

class Date
    def m_d_y
      [mon, mday, year].join("/")
    end
end
于 2010-02-06T18:45:23.090 に答える
0

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

"02/02/1980".gsub(/(?<!\d)0(\d)/,$1)
=> "2/2/1980"
于 2010-02-06T08:46:43.200 に答える
0

問題は、有効な日付と一致しないため、置換によって有効な文字列が壊れてしまうことです。修正するには:

正規表現:(^|(?<=/))0

置換:''

于 2010-02-06T08:46:55.477 に答える
0

あなたは、Ruby が構文エラーをスローしていると言うので、正規表現に到達する前に問題が発生します。おそらく、あなたはstrftime何も呼んでいないからです。試す:

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

次に、Time.now をリアルタイムに置き換えてから、正規表現をデバッグします。

于 2010-02-06T09:01:44.340 に答える