我需要提取括号之间的数字。数字的数量可以改变。
示例:
[2,5,8]
或
[11]
或
[3,7,9,12]
我需要能够提取最后一个数字。问题是,JSON文件很长并且包含大量数字和文本。这些数字是我需要的唯一数字,唯一用逗号分隔的数字,AND没有空格,AND用括号括起来。
到目前为止,我已经尝试了正则表达式:
info.scan(/(\d,)+(\d?)\]/)
只输出括号。
答案 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+ )
\]