簡體   English   中英

使用正則表達式從字符串中檢索數字

[英]retrieve numbers from a string with regex

我有一個字符串,以下面的格式返回持續時間。

"152M0S" or "1H22M32S"

我需要從中提取小時,分鍾和秒數作為數字。

我嘗試使用正則表達式,如下所示

video_duration.scan(/(\d+)?.(\d+)M(\d+)S/)

但它沒有按預期返回。 任何人都知道我在哪里錯了。

"1H22M0S".scan(/\d+/)
#=> ["1", "22", "0']

你可以使用這個表達式: /((?<h>\\d+)H)?(?<m>\\d+)M(?<s>\\d+)S/

"1H22M32S".match(/((?<h>\d+)H)?(?<m>\d+)M(?<s>\d+)S/)
#=> #<MatchData "1H22M32S" h:"1" m:"22" s:"32">

"152M0S".match(/((?<h>\d+)H)?(?<m>\d+)M(?<s>\d+)S/)
#=> #<MatchData "152M0S" h:nil m:"152" s:"0">

組后面的問號使其成為可選項。 要訪問數據: $~[:h]

如果要提取數字,可以這樣做:

"1H22M32S".match(/(?<hour>(\d+))H(?<min>(\d+))M(?<sec>(\d+))S/i).captures
# => ["1", "22", "32"]
"1H22M32S".match(/(?<hour>(\d+))H(?<min>(\d+))M(?<sec>(\d+))S/i)['min']
# => "22"
"1H22M32S".match(/(?<hour>(\d+))H(?<min>(\d+))M(?<sec>(\d+))S/i)['hour']
# => "1"

我,我是hashify

def hashify(str)
  str.gsub(/\d+[HMS]/).with_object({}) { |s,h| h[s[-1]] = s.to_i }
end

hashify "152M0S"    #=> {"M"=>152, "S"=>0} 
hashify "1H22M32S"  #=> {"H"=>1, "M"=>22, "S"=>32} 
hashify "32S22M11H" #=> {"S"=>32, "M"=>22, "H"=>11} 
hashify "1S"        #=> {"S"=>1} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM