Рубиновое регулярное выражение с использованием gsub

StackOverflow https://stackoverflow.com/questions/2212553

  •  19-09-2019
  •  | 
  •  

Вопрос

Привет, я новичок в 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"

Проблема в том, что он не будет соответствовать допустимым датам, поэтому ваша замена будет обозначать действительные строки. Исправить:

Рексаксом: (^|(?<=/))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

Затем замените время.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top