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