1

String#to_i数字が文字列の先頭にある場合にのみ機能するようです。

作品:

"123acb".to_i #=> 123

動作しませんが、私が達成しようとしていること:

"abc123def".to_i #=> 123

これを行うための組み込みメソッドを探していましたが、見つかりませんでした。正規表現を使用する唯一のオプションですか?

  • 編集 - うわー!良いオプションがたくさん!余談ですがto_i、先頭の数字だけを扱う特定の理由はありましたか?
4

5 に答える 5

4

このようなことをするのはどうですか?

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

大きな文字列内で複数の数値を処理したい場合は、次のことができます

"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]
于 2013-09-27T06:41:10.380 に答える
4

scanではなくを使用した別のアプローチを次に示しsplitます。

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

捨てscanながらキープすることに注意してください....split

実際の質問に答えるには、「これを行うための組み込みメソッドはありますか?」、、、および友人を組み込みに「十分に近い」と見なさない限り、 Ruby String クラスのドキュメントから、存在しないことがわかります。scansplitto_idelete

于 2013-09-27T06:45:58.307 に答える
2

以下を使用してはどうString#trですか?

"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456
于 2013-09-27T07:04:34.863 に答える