有没有从字符串中提取整数的方法?

时间:2013-09-27 06:35:40

标签: ruby string

似乎String#to_i仅在数字在字符串中前导时才有效。

使用:

"123acb".to_i #=> 123

不起作用,但我正在努力实现目标:

"abc123def".to_i #=> 123

我一直在寻找一种内置的方法来做到这一点,但我还没找到。我唯一的选择是使用正则表达式吗?

  • 编辑 - 哇!很多不错的选择!顺便说一下,为什么to_i只处理前导号码有什么具体原因吗?

5 个答案:

答案 0 :(得分:4)

做这样的事情怎么样?

"abc123def".gsub(/\D/, '').to_i
# => 123

如果要在大字符串中处理多个数字,可以执行

"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]

答案 1 :(得分:4)

这是另一种方法,使用scan而不是split

>> "abc123def456ghi".scan(/\d+/).join.to_i
=> 123456

请注意,scan会在split被抛弃时保持......

要回答实际问题“是否有内置方法来执行此操作?”您可以从Ruby String class documentation看到没有,除非您将scansplitto_idelete和朋友视为“足够接近”内置。

答案 2 :(得分:4)

"abc123def"[/\d+/].to_i
# => 123

答案 3 :(得分:3)

使用delete

的另一个人
"abc123def456ghi".delete("^0-9").to_i
# => 123456

答案 4 :(得分:2)

以下使用String#tr怎么样?

"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456