繁体   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