我仍然是Ruby的新手,我有点卡住了。 我需要从字符串的末尾得到一个数字。 让我们说我有字符串“potato85”,我需要85。 数字的位数可以变化,就像它可能是“potato8” - “potato8585”。 有什么方法可以分割字符串并得到第一部分和数字吗?
答案 0 :(得分:14)
您可以使用String#scan方法。例如:
my_string = 'potato8585'
my_string.scan( /\d+$/ ).first
# => "8585"
my_string = 'potato8'
my_string.scan( /\d+$/ ).first
# => "8"
此方法将字符串中的所有可能匹配读取到数组中,但$
锚点将确保只有一个元素。然后,只需弹出数组中的第一个元素即可返回一个字符串。
还有其他方法可以做到这一点,但这对我来说似乎是最简单的解决方案。 YMMV。
答案 1 :(得分:4)
这是一种方法:
"potato85".reverse.to_i.to_s.reverse.to_i # => 85
但你可能想要使用正则表达式。
答案 2 :(得分:1)
我会在.match()中使用正则表达式更多信息:http://www.ruby-doc.org/core-1.9.3/Regexp.html
答案 3 :(得分:1)
使用一点正则表达式可以满足您的需求。看看这个:
[1] pry(main)> r = /(.*?)(\d+)$/
=> /(.*?)(\d+)$/
[2] pry(main)> m = r.match "potato8"
=> #<MatchData "potato8" "potato" "8">
[3] pry(main)> m = r.match "potato85"
=> #<MatchData "potato85" "potato" "85">
[4] pry(main)> m = r.match "potato8585"
=> #<MatchData "potato8585" "potato" "8585">
[5] pry(main)> m = r.match "p0t4to8585"
=> #<MatchData "p0t4to8585" "p0t4to" "8585">
[6] pry(main)> m[1]
=> "p0t4to"
[7] pry(main)> m[2].to_i
=> 8585
所以(.*?)
非贪婪地匹配任意数量的任何字符,然后(\d+)$
匹配字符串末尾的1位或更多位数。