String#to_i数字が文字列の先頭にある場合にのみ機能するようです。
作品:
"123acb".to_i #=> 123
動作しませんが、私が達成しようとしていること:
"abc123def".to_i #=> 123
これを行うための組み込みメソッドを探していましたが、見つかりませんでした。正規表現を使用する唯一のオプションですか?
- 編集 - うわー!良いオプションがたくさん!余談ですが
to_i、先頭の数字だけを扱う特定の理由はありましたか?
このようなことをするのはどうですか?
"abc123def".gsub(/\D/, '').to_i
# => 123
大きな文字列内で複数の数値を処理したい場合は、次のことができます
"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]
scanではなくを使用した別のアプローチを次に示しsplitます。
>> "abc123def456ghi".scan(/\d+/).join.to_i
=> 123456
捨てscanながらキープすることに注意してください....split
実際の質問に答えるには、「これを行うための組み込みメソッドはありますか?」、、、および友人を組み込みに「十分に近い」と見なさない限り、 Ruby String クラスのドキュメントから、存在しないことがわかります。scansplitto_idelete
以下を使用してはどうString#trですか?
"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456