在Ruby中的第一个=符号后获取子字符串

at.*_*at. 42 ruby string

纯粹出于好奇,是否有更优雅的方法来简单地获取字符串中第一个=符号后的子串?以下作品回馈name=bob:

string = "option=name=bob"
string[string.index('=')+1..-1]
Run Code Online (Sandbox Code Playgroud)

它只是感觉不是非常Ruby.这也有效:

string.split('=', 2)[1]
Run Code Online (Sandbox Code Playgroud)

再次,不是很优雅,特别是因为split做了额外的不必要的工作.正则表达式是答案吗?我觉得这对于在字符串中查找单个字符位置的简单性来说有点过分:

string.match('=(.*)')[1]
Run Code Online (Sandbox Code Playgroud)

我不得不想象这是一种极为常见的情况,是不是有string.after('=')类型方法?Ruby on Rails是否提供类似这样的事情,因为在网络上使用这种操作的频率?

更新:忘记在找不到符号时提及情况,nil或者返回空字符串.但是正则表达式机制和.index方法需要额外检查(因此不那么优雅).

Tho*_*mas 13

还有这种方式:

string.partition('=')[2]
Run Code Online (Sandbox Code Playgroud)

还有这个:

string.sub(/.*?=/, '')
Run Code Online (Sandbox Code Playgroud)

我想我更喜欢你提到的regexp方式.


Bri*_*tas 5

可能不是 Ruby 方式(有点神秘),但你可以这样做:

string[/=/]
$'
=> "name=bob"
Run Code Online (Sandbox Code Playgroud)

或者

/=/ =~ string
$'
=> "name=bob"
Run Code Online (Sandbox Code Playgroud)

$'是成功匹配保存字符串的全局变量。nil如果没有任何匹配的话也是如此!

  • 好的。现在去忘记它吧;) (2认同)