50

=純粋に好奇心から、文字列の最初の記号の後に部分文字列を単純に取得するよりエレガントな方法はありますか?次の作品はお返ししますname=bob

string = "option=name=bob"
string[string.index('=')+1..-1]

あまりRubyを感じないだけです。これも機能します:

string.split('=', 2)[1]

split繰り返しますが、特に余分な不要な作業を行っているため、あまりエレガントではありません。正規表現が答えですか?文字列内の単一の文字位置を簡単に見つけるには、これは少しやり過ぎだと感じました。

string.match('=(.*)')[1]

これは非常に一般的な状況だと思いますが、string.after('=')タイプ方式はありませんか?この種の操作がWebで使用される頻度を考えると、Ruby on Railsはこのようなものを提供しますか?

更新:シンボルが見つからない場合、nilまたは空の文字列が返される必要がある場合の状況について言及するのを忘れました。ただし、正規表現のメカニズムと.indexメソッドでは、そのための追加のチェックが必要です(あまりエレガントではありません)。

4

6 に答える 6

85

正確.afterではありませんが、次のように非常に近いです:

string.partition('=').last

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-partition

于 2012-12-28T18:11:33.533 に答える
13

こんな方法もあります:

string.partition('=')[2]

そしてこれ:

string.sub(/.*?=/, '')

ただし、あなたが言及した正規表現の方法を好むと思います。

于 2012-12-28T18:11:08.050 に答える
4

おそらくRuby-wayではありません(少しわかりにくいです)が、これを行うことができます:

string[/=/]
$'
=> "name=bob"

また

/=/ =~ string
$'
=> "name=bob"

$'一致が成功した、文字列を保持するグローバルです。nil何も一致しない場合もそうです!

于 2012-12-28T18:10:19.520 に答える
1

String#matchを使用する

ポジティブルックビハインドの正規表現を使用して、一致するものを見つけることができます。例えば:

string = "option=name=bob"
string.match /(?<==).*/
# => #<MatchData "name=bob">

一致変数を使用して結果にアクセスする

一致データを変数に割り当てていない場合でも、Rubyはそれを特別な一致変数に保存します。

$&
# => "name=bob"
于 2012-12-29T18:05:57.707 に答える