0

私はRubyでこのような文字列を持っています

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

その文字列から word と id の両方の値を取得するにはどうすればよいですか?

4

4 に答える 4

2

これが機能するアプローチです-ターゲット文字列を空白と等号文字でトークンに分割し(tokens=str.split(/[= ]/))、それらからハッシュを作成します(Hash[*tokens])。結果は、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"

もちろん、「キー」または「値」に等号またはスペースが含まれていると壊れますが、例では機能します。

于 2012-05-23T16:01:36.373 に答える
1
string="word=0 id=891efc9a-2210-4beb-a19a-5e86b2f8a49f"

word,id = string.match(/word=(.*) id=(.*)/).captures
于 2012-05-23T15:59:09.263 に答える
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 に答える
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 に答える