如何从字符串的末尾获取数字

我仍然是Ruby的新手,我有点卡住了。 我需要从字符串的末尾得到一个数字。 假设我有字符串“potato85”,我需要85.数字中的位数可以变化,就像它可能是“potato8” – “potato8585”。 有什么方法可以拆分字符串并获得第一部分和数字?

使用String#scan方法

您可以使用String#scan方法。 例如:

my_string = 'potato8585' my_string.scan( /\d+$/ ).first # => "8585" my_string = 'potato8' my_string.scan( /\d+$/ ).first # => "8" 

此方法将字符串中的所有可能匹配读取到数组中,但$ anchor将确保只有一个元素。 然后,只需弹出数组中的第一个元素即可返回一个字符串。

还有其他方法可以做到这一点,但这对我来说似乎是最简单的解决方案。 因人而异。

这是一种方法:

 "potato85".reverse.to_i.to_s.reverse.to_i # => 85 

但是你可能想要使用正则表达式。

我会使用带有.match()的正则表达式更多信息: http ://www.ruby-doc.org/core-1.9.3/Regexp.html

使用一点正则表达式将为您提供所需。 看一下这个:

 [1] pry(main)> r = /(.*?)(\d+)$/ => /(.*?)(\d+)$/ [2] pry(main)> m = r.match "potato8" => # [3] pry(main)> m = r.match "potato85" => # [4] pry(main)> m = r.match "potato8585" => # [5] pry(main)> m = r.match "p0t4to8585" => # [6] pry(main)> m[1] => "p0t4to" [7] pry(main)> m[2].to_i => 8585 

所以(.*?)非贪婪地匹配任意数量的任何字符,然后(\d+)$匹配字符串末尾的1位或更多位数。