Ruby 正则表达式 MatchData 到整数转换

标签 ruby regex

我有一个字符串,由 *nix "hostname"命令填充,我需要解析它以获得一个数字。这是最简单的部分。困难来自需要对捕获的数字进行 Math(tm)。显然,正则表达式捕获始终是 MatchData 类型,它没有任何数学函数,如“add”或“modulo”,也没有“.to_i”的方法。目前,为了对捕获的数字进行 Math(tm),我需要使用 MatchData 的 .to_s 方法将捕获转换为字符串,然后使用 String 的 .to_i 使其成为整数。我的问题是,这样做的更好方法是什么?

hostname = "webserver1337.mycorp.com"
number = hostname.match(/[a-z]+/) 

puts "#{number}, with class #{number.class}" # prints '1337, with class MatchData'

somevar = number + 1 # this will fail horribly

temp1 = number.to_s
number = temp1.to_i

someothervar = number + 1

puts "#{number}, #{someothervar} with class #{number.class}" # prints '1337, 1338 with class FixNum'

这……有点难看。是否有更好/更清洁的方法来实现同样的目标?

最佳答案

MatchData 对象将使用 [] 返回匹配项中包含的字符串。例如:

hostname = "webserver1337.mycorp.com"
m = hostname.match( /([a-z]+)(\d+)/ ) 
number = m[2].to_i + 1
p m[0], m[1], m[2], number

一次性完成:

number = hostname.match(/\d+/)[0].to_i + 1

关于Ruby 正则表达式 MatchData 到整数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418773/

相关文章:

html - 使用 Rails,我应该将 html 片段放在哪里?我不想要部分,但我希望在开发过程中重新加载它们

javascript - RegEx - 带有变量关键字的 JavaScript .match()

c# - 如何使用正则表达式在 C# 中检查以下条件

正则表达式和 ios5 stringByMatching ==> NSRegularExpression

ruby-on-rails - Rails Geocoder 限制地区/国家

ruby-on-rails - 如何使用开放/封闭原则或策略模式重构此 ruby​​ 代码

ruby-on-rails - Rails 4 应用程序中未定义的方法类 `all'

java - 如何执行不区分大小写的模式搜索和保留大小写的替换?

asp.net - 文本框的正则表达式验证器

ruby - 如何修复 Linux 中的 "usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed"错误?