“红宝石”在使用捕获之前检查正则表达式匹配的方法

发布于 2024-10-29 02:27:25 字数 406 浏览 2 评论 0原文

在 Ruby Sinatrat 应用程序中,我希望检索与我的输入中可能存在或不存在的字符串关联的一些数字。例如:“Cruisers #”可能存在也可能不存在,并且 # 可以是任何整数。

此外,正常英文数字表示法中的逗号(1,000 表示一千)中会有一个句号(1.000 表示一千)。

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

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

In a Ruby Sinatrat app, I'm looking to retrieve some numbers associated with strings that may or may not be present in my input. For example: "Cruisers #" might or might not be present, and the # may be any integer.

In addition, where commas would be in normal English number notation (1,000 for one thousand), there will be a period in this notation (1.000 for one thousand).

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

Seems like there should be a more compact, 'Ruby'ish way to do this - specifically, I'm looking for a way to combine the regex.match call and the conditional assignment into one statement. Is this, or any other refactoring, possible here? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

掩耳倾听 2024-11-05 02:27:25
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
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")

prints:

23444221
0
很酷又爱笑 2024-11-05 02:27:25

有问题。已更新。

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

There was a problem. Updated.

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
还如梦归 2024-11-05 02:27:25

以下 1 内衬就是您所需要的

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

The following 1 liner is all you need

'1234 Cruiser 1.222'.match(/Cruiser\s*([\d.]*)/).nil? ? 0 : $1.gsub('.', '').to_i
 => 1222
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文