-1

イベントを作成しています。単一の文字列を解析して、モデルの属性を設定できるようにしたいと考えています。例として、次のことを行いたいと思います。

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
4

3 に答える 3

1

常にその形式を使用する場合は、次のことができます。

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"]
于 2013-07-11T19:56:41.993 に答える
0
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"
于 2013-07-11T19:54:17.840 に答える
0

以下はあなたのために働くはずです:

/^(.*) at (\d{1,2}[a|p]m.*) for (.*)$/gm

置換では、次を使用します。

title = $1\n\ndate_time = $2\n\nduration = $3

作業例: http://regexr.com?35i10

説明:

^行の先頭から開始することを意味します

(.*) atat最初の変数まですべてを保存することを意味します。

(\d{1,2}[a|p]m.*)は、1 桁または 2 桁の数字 ( \d{1,2}) の後にaOR p+が続きm、さらに...

for簡単です。

(.*)$行の終わりまですべてを保存することを意味します。

/gm正規表現がグローバルで複数行であることを伝えます

于 2013-07-11T19:55:43.007 に答える