正则表达式挑战

Nic*_*Res 1 ruby regex ruby-on-rails ruby-on-rails-3

我试图只抓住这个字符串中的一个:

Serving Size: 1 cup, halves, Calories: 48.6, Fat: 0.5g, Carbs: 11.7g, Protein: 1g
Run Code Online (Sandbox Code Playgroud)

还有很多人喜欢它.虽然每个字符串都有不同的变量.例如,上面的字符串可能如下所示:

Serving Size: 100 oz, Calories: 48.6, Fat: 0.5g, Carbs: 11.7g, Protein: 1g
Run Code Online (Sandbox Code Playgroud)

等等...

所以,我现在正试图获得字符串中的"oz"或"cup"部分.

我试过的正则表达式看起来像这样:

(?<=Serving Size:\s\d*\s)
Run Code Online (Sandbox Code Playgroud)

虽然在rubular中它一直说"无效".

虽然如果我这样做

(?<=Serving Size:)\s\d*\s
Run Code Online (Sandbox Code Playgroud)

它将完美匹配数字...我正在尝试排除数字并匹配度量类型.

我怎样才能做到这一点?

Ser*_*sev 6

这个如何?

s = "Serving Size: 1 cup, halves, Calories: 48.6, Fat: 0.5g, Carbs: 11.7g, Protein: 1g"

regex = /Serving Size:\s*(?<amount>\d+)\s*(?<units>\w+)/

m = s.match(regex) # => #<MatchData "Serving Size: 1 cup" amount:"1" units:"cup">
m['units'] # => "cup"
m['amount'] # => "1"
Run Code Online (Sandbox Code Playgroud)