Ruby:如何解析字符串以将某些内容拉出并将其分配给变量

时间:2011-11-04 17:28:08

标签: ruby

我有一个看起来像这样的字符串:

"my name is: andrew"

我想解析字符串,从字符串中提取名称,并将其分配给变量。我如何用Ruby做到这一点?

更新

我用作例子的字符串只是一个例子。我将使用的字符串可以更改格式,因此您不能依赖实际示例中的冒号。以下是我正在使用的一些示例:

"/nick andrew"     # command: nick, value: "andrew"
"/join developers" # command: join, value: "developers"
"/leave"           # command: leave, value: nil

我想使用某种正则表达式来解决这个问题(因为字符串可以改变格式),而不是在特定字符上拆分字符串或依赖于某个字符位置编号。

5 个答案:

答案 0 :(得分:12)

s = "my name is: andrew"
p s.split(':')[1].strip # "andrew"

  1. split
  2. strip

答案 1 :(得分:6)

This tutorial确实帮助我理解了如何使用Ruby中的正则表达式。

使用正则表达式获取所需字符串的一种方法是用空字符串替换不需要的东西。

original_string = "my name is: andrew"
name = original_string.sub(/^my name is: /, '') # => 'andrew'

another_format = "/nick andrew"
name = another_format.sub(/^\/nick /, '') # => 'andrew'

然而,这只是字符串替换/替换。正则表达式没有捕获任何内容。

要使用正则表达式捕获字符串,可以使用Ruby match方法:

original_string = "my name is: andrew"
matches = original_string.match /^my name is: (.*)/
name = matches[1] # return the first match

答案 2 :(得分:5)

另一种方式:

name = "my name is: andrew".split(/: */)[1] # => "andrew"

或     name =“我的名字是:andrew”.split(/:* /)。last#=> “安德鲁”


打破它,首先我们把它分成几部分。 正则表达式/:* /表示a:后跟任意数量的空格将是我们的分割器。

"my name is: andrew".split(/: */) # => ["my name is", "andrew"]

然后我们选择第二项:

["my name is", "andrew"][1] # => "andrew" 

答案 3 :(得分:2)

一种方法是:

s = "my name is: andrew"
pos = (s =~ /(?!.*:).*/)
result = s[pos..-1]
p result.strip!  # "andrew"

另:

s = "my name is: andrew";
p s.slice(s.index(":")..-1) # "andrew"

答案 4 :(得分:1)

s.split.last

这应该适用于所有情况。