首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用捕获之前检查正则表达式匹配的“‘Ruby”方法

在使用捕获之前检查正则表达式匹配的“‘Ruby”方法
EN

Stack Overflow用户
提问于 2011-04-01 11:07:01
回答 3查看 495关注 0票数 0

在Ruby Sinatrat应用程序中,我希望检索一些与字符串相关的数字,这些字符串可能存在于我的输入中,也可能不存在。例如:"Cruisers #“可能存在,也可能不存在,#可以是任意整数。

此外,如果逗号在普通英语数字表示法中(1000换1000),则此表示法中将有句点(1000换1000)。

代码语言:javascript
复制
match = /Cruiser\s*([\d.]*)/m.match(report)
match ?
   self.cruiser = match.captures[0].gsub(".", "") :
   self.cruiser = 0

似乎应该有一种更紧凑的,“Ruby”式的方法来做这件事--具体地说,我正在寻找一种将regex.match调用和条件赋值结合到一条语句中的方法。这或任何其他重构,在这里都是可能的吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-01 11:20:28

这是个问题。已更新。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-04-01 11:28:28

代码语言:javascript
复制
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")

打印:

代码语言:javascript
复制
23444221
0
票数 2
EN

Stack Overflow用户

发布于 2011-04-02 02:00:42

下面的1行代码就是你所需要的

代码语言:javascript
复制
'1234 Cruiser 1.222'.match(/Cruiser\s*([\d.]*)/).nil? ? 0 : $1.gsub('.', '').to_i
 => 1222
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5508727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档