使用 gsub 的 Ruby 正则表达式
您好,我是 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
这个正则表达式有什么问题?
谢谢。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
\b
是字边界的零宽度标记,因此\b0
零之前不能有数字。\b
is a zero-width marker for a word boundary, therefore\b0
cannot have a digit before the zero.您可以简单地删除以斜杠结尾的部分中的 0。
为我工作
输出
You can simply remove 0s in parts that ends with a slash.
Works for me
outputs
当你可以做到这一点时,为什么还要费心使用正则表达式呢?
Why bother with regex when you can do this?
尝试
/(?
Try
/(?<!\d)0(\d)/
问题是它与有效日期不匹配,因此您的替换将破坏有效字符串。修复:
正则表达式:
(^|(?<=/))0
替换:
''
The problem is that it won't match valid dates so your replacement will mangle valid strings. To fix:
Regex:
(^|(?<=/))0
Replacement:
''
你说 Ruby 抛出了一个语法错误,所以你的问题就出在你到达正则表达式之前。可能是因为您没有在任何事情上调用
strftime
。尝试:然后将 Time.now 替换为实际时间,然后调试您的正则表达式。
You say that Ruby is throwing a syntax error, so your problem lies before you have even reached the regexp. Probably because you aren't calling
strftime
on anything. Try:Then replace Time.now with a real time, then debug your regexp.