私はまだRubyに慣れていないので、少し行き詰まっています。文字列の末尾から数字を取得する必要があります。文字列「potato85」があり、85 が必要だとしましょう。数字の桁数は、「potato8」から「potato8585」のようにさまざまです。文字列を分割して最初の部分と番号を取得する方法はありますか?
質問する
5101 次
4 に答える
14
String#scan メソッドを使用する
String#scanメソッドを使用できます。例えば:
my_string = 'potato8585'
my_string.scan( /\d+$/ ).first
# => "8585"
my_string = 'potato8'
my_string.scan( /\d+$/ ).first
# => "8"
このメソッドは、文字列内のすべての可能な一致を配列に読み取りますが、$
アンカーは要素が 1 つだけであることを保証します。次に、配列から最初の要素をポップして、文字列を返します。
これを行う方法は他にもありますが、これが私にとって最も簡単な解決策のようです。YMMV。
于 2012-08-28T11:30:49.103 に答える
4
これを行う1つの方法は次のとおりです。
"potato85".reverse.to_i.to_s.reverse.to_i # => 85
しかし、おそらく正規表現を使用したいと思うでしょう。
于 2012-08-28T11:29:34.643 に答える
1
.match()で正規表現を使用します。詳細はこちら:http ://www.ruby-doc.org/core-1.9.3/Regexp.html
于 2012-08-28T11:27:58.897 に答える
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 つ以上の数字に一致します。
于 2012-08-28T11:35:37.167 に答える