0

我在Ruby中有一个这样的字符串

word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f

如何从该字符串中获取 word 和 id 值?

4

4 回答 4

2

这是一种可行的方法 - 通过空格和等号字符 ( ) 将目标字符串拆分为标记,并从中tokens=str.split(/[= ]/)创建一个哈希 ( Hash[*tokens])。结果是 aHash,其键是等号之前的标记,值是等号之后的标记:

s = 'word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f'
h = Hash[*s.split(/[= ]/)]
h # => {"word"=>"0", "id"=>"891efc9a-2210-4beb-a19a-5e86b2f8a49f"}
h['word'] # => "0"
h['id'] # => "891efc9a-2210-4beb-a19a-5e86b2f8a49f"

当然,如果您的“键”或“值”包含等号或空格,它会中断,但它适用于您的示例。

于 2012-05-23T16:01:36.373 回答
1

这应该有帮助!

s = "word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f"

data = {}

s.scan(/(\w+)(?=\=)\=([^\s]+)/).each do |pair|
  key, value = pair
  data[key.to_sym] = value
end

puts data.inspect    
#=> {"word"=>"0", "id"=>"891efc9a-2210-4beb-a19a-5e86b2f8a49f"}

puts data[:word]
#=> 0

puts data[:id]
#=> 891efc9a-2210-4beb-a19a-5e86b2f8a49f
于 2012-05-23T15:57:20.620 回答
1
string="word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f"

word,id = string.match(/word=(.*) id=(.*)/).captures
于 2012-05-23T15:59:09.263 回答
0

我会使用一些简单的东西,例如:

str = 'word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f'
word, id = str.scan(/=(\S+)/).flatten # => ["0", "891efc9a-2210-4beb-a19a-5e86b2f8a49f"]

您想要的每个值前面都有,=因此请使用它作为值的占位符。(...)在正则表达式中使用捕获告诉scan创建一个新的子数组,因此flatten将子数组提升回标准数组元素:

'foo'.scan(/(o)/) # => [["o"], ["o"]]
'foo'.scan(/(o)/).flatten # => ["o", "o"]
于 2015-08-20T22:38:51.627 回答