嗨,我是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 在零之前不能有数字。

当您可以做到这一点时,为什么还要打扰Regex呢?

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