str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
我想將其轉換爲一個數組:
arr = [[591, 184] , [741, 910] , [987,512], [2974, 174]]
我怎樣才能做到這一點?
str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
我想將其轉換爲一個數組:
arr = [[591, 184] , [741, 910] , [987,512], [2974, 174]]
我怎樣才能做到這一點?
一個JSON解析器應該很好地工作:
require "json"
str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
p JSON.parse(str)
# => [[591, 184], [741, 910], [987,512], [2974, 174]]
嘗試在eval.in:https://eval.in/777054
您必須使用 「EVAL」:
> str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
# => "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
> arr = eval str
# => [[591, 184], [741, 910], [987, 512], [2974, 174]]
一種方式做此:
str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
reg = /(?<=\[)[\d,?\s?]+(?=\])/
str.scan(reg).map { |s| s.scan(/\d+/).map(&:to_i) }
#=> [[591, 184], [741, 910], [987, 512], [2974, 174]]
或採取葉出@喬丹的書,但使用YAML:
require 'yaml'
str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
YAML.load(str) #=> [[591, 184], [741, 910], [987, 512], [2974, 174]]
我對字符類'[\ d,?\ s?] +'感到困惑。在一個字符類中,問號是從字面上理解的,所以這將匹配一個或多個數字,逗號,問號或空白字符。 –
我會split
和scan
分兩步進行。
str = "[[591, 184] , [741, 910] , [987,512], [2974, 174]]"
str.split(/\]\s*,\s*\[/).map { |s| s.scan(/\d+/).map(&:to_i) }
#=> [[591, 184], [741, 910], [987, 512], [2974, 174]]
注意
str.split(/\]\s*,\s*\[/)
# => ["[[591, 184", "741, 910", "987,512", "2974, 174]]"]
雖然技術上成立,'eval'絕對是不得已而爲之。由於這些數據是有效的JSON,喬丹有一個更好的主意。 – tadman