0

指定された文字列から時刻と日付を抽出する必要がある小さな ruby​​ プログラムを作成しています...最終的には、それがどのタイプの予定/会議であるかを推測し、それを使用してユーザーに最適なサービスを提供します。残念ながら、以下の正規表現は私の崇高なテキスト正規表現検索では機能しますが、ルビーでは機能しません。

email = "
Med Check
From Google Calendar
This invitation is out of date. This event has been updated.
View updated information on Google Calendar
more details »
Med Check
When
Mon Jan 10, 2013 9:30am – 10:30am Eastern Time
Calendar
Going?   Yes - Maybe - No    more options »".downcase;

require 'time'


#January    February    March   April   May June    July    August  September   October November    December
r = /(jan(|uary)|feb(|uary)|mar(|ch)|apr(|il)|may|jun(|e)|jul(|y)|aug(|ust)|sept(|tember)|oct(|ober|)|nov(|ember)|dec(|ember)|(\b([1-9]|[12][0-9]|3[01])\b))( |/|,|)(([0-3]|)[0-9]|)(, |\/| )\b2[0-9]{3}\b/
if email[r]
  puts email[r]
  date =Date.parse(email[r])
  puts " We found a date.. Let's see if we can find a time: #{date}"

  if date< Date.today
    puts "Why do we need to worry about this?"
  else
    r = /([0-9]|)[0-9]:[0-9][0-9][ |pm|am|](am|pm)/
    if email[r]
        time = Time.parse("#{email[r]} #{date}")
        puts "Found time #{time}"
        if time<Time.now
            puts "Error: Time before #{Time.now}"
        else
            #Great!
            puts "Finished let's add it."

        end
    end
  end
end

次のエラーをスローします。

/Users/michael/Downloads/parse.rb:27: end pattern with unmatched parenthesis: /(jan(|uary)|feb(|uary)|mar(|ch)|apr(|il)|may|jun(|e)|jul(|y)|aug(|ust)|sept(|tember)|oct(|ober|)|nov(|ember)|dec(|ember)|(\b([1-9]|[12][0-9]|3[01])\b))( |/
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ','
...1-9]|[12][0-9]|3[01])\b))( |/|,|)(([0-3]|)[0-9]|)(, |\/| )\b...
...                               ^
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ')'
...-9]|3[01])\b))( |/|,|)(([0-3]|)[0-9]|)(, |\/| )\b2[0-9]{3}\b/
...                               ^
/Users/michael/Downloads/parse.rb:27: syntax error, unexpected ']', expecting ')'
...[01])\b))( |/|,|)(([0-3]|)[0-9]|)(, |\/| )\b2[0-9]{3}\b/
...                               ^
/Users/michael/Downloads/parse.rb:49: syntax error, unexpected end-of-input, expecting ')'
4

3 に答える 3

5

正規表現にエスケープされていないスラッシュ文字があります。http://rubular.com/r/TvoKOsSImtのように、Rubular を使用して式をテストできます。

于 2013-07-14T19:40:45.667 に答える
1

に変更/\/ます。

つまり、正規表現でスラッシュまたはバックスラッシュを記述する\前に、それらの前に追加のバックスラッシュ ( ) を配置します。

于 2013-07-14T19:41:01.003 に答える