簡體   English   中英

使用捕獲之前檢查正則表達式匹配的“ Ruby”方法

[英]'Ruby' way to check for regex match before using captures

在Ruby Sinatrat應用程序中,我希望檢索與輸入中可能存在或可能不存在的字符串相關的一些數字。 例如:“巡游者#”可能存在也可能不存在,並且#可以是任何整數。

此外,如果逗號使用普通的英語數字表示法(1,000表示一千),則會有一個句點(1.000表示一千)。

match = /Cruiser\s*([\d.]*)/m.match(report)
match ?
   self.cruiser = match.captures[0].gsub(".", "") :
   self.cruiser = 0

似乎應該有一種更緊湊的“ Ruby”式方法來實現此目的-具體來說,我正在尋找一種將regex.match調用和條件賦值組合到一個語句中的方法。 這是否可能,或進行其他任何重構? 謝謝。

def get_cruiser(str)
  if str =~ /Cruiser\s*([\d.]*)/m
    $1.gsub(".","")
  else
    0
  end
end

puts get_cruiser("Cruiser 23.444.221")
puts get_cruiser("Crusier")

印刷品:

23444221
0

出現問題了。 更新。

report1 = 'Cruiser 23.444.221'
report2 = 'Cruiser'
report3 = ''
report4 = '23/04/2010 Cruiser 23.444.221'

class String
  def cruiser_count; self[/Cruiser\s*[\d.]*/].to_s.scan(/\d+/).join.to_i end
end

p report1.cruiser_count # => 23444221
p report2.cruiser_count # => 0
p report3.cruiser_count # => 0
p report4.cruiser_count # => 23444221

您需要的是以下1支班輪

'1234 Cruiser 1.222'.match(/Cruiser\s*([\d.]*)/).nil? ? 0 : $1.gsub('.', '').to_i
 => 1222

暫無
暫無

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

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