0

我正在编写一个小型 ruby​​ 程序,该程序需要从给它的字符串中提取时间和日期......它最终会猜测它是什么类型的约会/会议,并使用它来最好地为用户服务。不幸的是,下面的正则表达式适用于我的崇高文本正则表达式搜索,但不适用于 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

您的正则表达式中有一个未转义的正斜杠字符。您可以使用 Rubular 来测试您的表达式,如http://rubular.com/r/TvoKOsSImt

于 2013-07-14T19:40:45.667 回答
1

Change this: (, |/| ) to this (, |\/| )

The unescaped slash is causing the ruby regex compiler to think that you have terminated the regular expression early. Adding the backslash before the slash causes it to be treated as a normal slash within the regular expression, rather than being interpreted as a delimiter indicating the end of the regular expression.

于 2013-07-14T19:42:47.693 回答
1

更改/\/

这意味着,在您在正则表达式中编写正斜杠或反斜杠之前,请\在它们之前放置一个额外的反斜杠 ( )。

于 2013-07-14T19:41:01.003 回答