イベントを作成しています。単一の文字列を解析して、モデルの属性を設定できるようにしたいと考えています。例として、次のことを行いたいと思います。
string = "Workout at the gym at 7pm on July 4th for 1 hour"
この文字列から、次の変数を設定したいと思います。
title = Workout at the gym
date_time = 7pm on July 4th
duration = 1 hour
常にその形式を使用する場合は、次のことができます。
re = string.match(/(?<title>.*) at (?<date_time>.*) for (?<duration>.*)/)
title, date_time, duration = re[:title], re[:date_time], re[:duration]
# ["Workout at the gym", "7pm on July 4th", "1 hour"]
str = "Workout at the gym at 7pm on July 4th for 1 hour"
a = str.split(/at|for/).map(&:strip)
# => ["Workout", "the gym", "7pm on July 4th", "1 hour"]
duration,date_time,title = a.pop,a.pop,a.join(" ")
duration # => "1 hour"
date_time # => "7pm on July 4th"
title # => "Workout the gym"
以下はあなたのために働くはずです:
/^(.*) at (\d{1,2}[a|p]m.*) for (.*)$/gm
置換では、次を使用します。
title = $1\n\ndate_time = $2\n\nduration = $3
説明:
^
行の先頭から開始することを意味します
(.*) at
at
最初の変数まですべてを保存することを意味します。
(\d{1,2}[a|p]m.*)
は、1 桁または 2 桁の数字 ( \d{1,2}
) の後にa
OR p
+が続きm
、さらに...
for
簡単です。
(.*)$
行の終わりまですべてを保存することを意味します。
/gm
正規表現がグローバルで複数行であることを伝えます