我在Ruby中有这样的字符串
word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f
如何从该字符串中获取单词和id值?
答案 0 :(得分:2)
这是一种可行的方法 - 通过空格和等号字符(tokens=str.split(/[= ]/)
)将目标字符串拆分为标记,并从中创建一个哈希值(Hash[*tokens]
)。 result is a Hash
的键是等号前面的标记,值是后面的标记:
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"
当然,如果你的“键”或“值”包含相同的符号或空格,它会破坏,但它适用于你的例子。
答案 1 :(得分: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
答案 2 :(得分:1)
string="word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f"
word,id = string.match(/word=(.*) id=(.*)/).captures
答案 3 :(得分: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"]