2017-04-16 65 views

回答

6

一个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

0

您必须使用 “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]] 
+3

虽然技术上成立,'eval'绝对是不得已而为之。由于这些数据是有效的JSON,乔丹有一个更好的主意。 – tadman

2

一种方式做此:

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]] 
+0

我对字符类'[\ d,?\ s?] +'感到困惑。在一个字符类中,问号是从字面上理解的,所以这将匹配一个或多个数字,逗号,问号或空白字符。 –

1

我会splitscan分两步进行。

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]]"] 
相关问题