正则表达式在括号'[]'中找到逗号分隔的数字?

时间:2014-04-01 15:51:20

标签: ruby regex string

我需要提取括号之间的数字。数字的数量可以改变。

示例:

[2,5,8]

[11]

[3,7,9,12]

我需要能够提取最后一个数字。问题是,JSON文件很长并且包含大量数字和文本。这些数字是我需要的唯一数字,唯一用逗号分隔的数字,AND没有空格,AND用括号括起来。

到目前为止,我已经尝试了正则表达式:

info.scan(/(\d,)+(\d?)\]/)

只输出括号。

3 个答案:

答案 0 :(得分:0)

要匹配方括号中的最后一个数字,您可以使用:

/\d+(?= *\])/

但是,如果输入是JSON字符串,则可以使用JSON库函数JSON.parse(string)来获取所需的数字。

答案 1 :(得分:0)

如果您正在接收JSON,那么做正确,实用的事情,并使用JSON解析器将数据返回到对象中,然后使用该对象的常规方法来访问其元素:

require 'json'

json_str = '{"array1":[2,5,8],"array2":[11],"array3":[3,7,9,12]}'
foo = JSON[json_str]

foo['array1'] # => [2, 5, 8]
foo['array2'] # => [11]
foo['array3'] # => [3, 7, 9, 12]

“Prettified”JSON的格式可能与普通的JSON输出不同,如果您尝试使用正则表达式,那么这种差异可能会破坏您的一天。如果你使用解析器,这是一个明智的选择:

puts JSON.pretty_generate(foo)
# >> {
# >>   "array1": [
# >>     2,
# >>     5,
# >>     8
# >>   ],
# >>   "array2": [
# >>     11
# >>   ],
# >>   "array3": [
# >>     3,
# >>     7,
# >>     9,
# >>     12
# >>   ]
# >> }

puts JSON[JSON.pretty_generate(foo)]
# >> {"array1"=>[2, 5, 8], "array2"=>[11], "array3"=>[3, 7, 9, 12]}

这与使用正则表达式解析HTML和XML非常相似。如果使用算法而不是解析器手动构建JSON,那么格式也可以改变;在任何一种情况下,你的代码都有很高的破解机会。

答案 2 :(得分:-1)

这可以提取括号之间的最后一个数字。

 #  \[(?:\d+,)*(\d+)\]

 \[ 
 (?: \d+ , )*
 ( \d+ )
 \]