4

私のコード:

require 'Date'

s = "I'm going away on Oct 2, 2012th"
puts Date.parse(s)

=> 2012-10-02 

で見つけた文字列から日付を削除したいDate.parse(s)。問題は、日付があることはわかっていますが、文字列にどのように書かれているかはわかりません。私はそれをDate.parse見つけて、「2012-10-02」を新しい形式に変換したことを知っています。

4

2 に答える 2

2

これが迅速で汚い解決策です。この関数date_string は、 によって検出された日付を含む文字列の一部だけを返しますparse

require 'date'

DATE_ERROR = -1

# If the string doesn't contain a date, it raises an
# exception.  This little helper routine catches the
# exception.
def get_date(s)
    date = 0
    begin
        date = Date.parse(s)
    rescue
        date = DATE_ERROR
    end
    date
end

# Returns just the part of the string containing the date
def date_string(s)
    # First, find the date contained in the string
    date = get_date(s)

    return "" if date == DATE_ERROR

    # Repeatedly chop off characters from the front to find the
    # start of the date
    first = 1
    while date == get_date(s[first..-1])
        first += 1
    end

    # Repeatedly chop off characters from the end to find the
    # end of the date
    last = s.length - 2
    while date == get_date(s[0..last])
        last -= 1
    end

    #Return just the date
    s[first - 1..last + 1]
end

puts date_string("I'm going away on Oct 2, 2012th")
puts date_string("I'm going away on 10/2/12 and not coming back")
puts date_string("10 Nov 1999")
puts date_string("I see no date here")

これは以下を出力します:

Oct 2, 2012
10/2/12
10 Nov 1999

したがって、次のようなことができます。

s = "I'm going away on Oct 2, 2012th"
datestr = date_string(s)
s.gsub!(datestr, "")
puts s
于 2012-09-11T17:46:44.163 に答える
0

Date日付を見つけた場所を教えてくれないようです。おそらく、独自のカスタム日付ファインダーを作成する必要があるでしょう。

于 2012-09-11T15:10:10.013 に答える