Ruby 正则表达式在括号中查找逗号分隔的数字';[]和#x27;?

Ruby 正则表达式在括号中查找逗号分隔的数字';[]和#x27;?,ruby,regex,string,Ruby,Regex,String,我需要提取括号中的数字。数字的数量可以改变 例如: [2,5,8] 或 或 我需要能够提取最后一个数字。问题是,JSON文件很长,包含很多数字和文本。这些数字是我需要的唯一数字,也是唯一用逗号分隔、没有空格、用括号括起来的数字 到目前为止,我已经尝试了正则表达式: info.scan(/(\d,)+(\d?)\]/) 只输出方括号。要匹配方括号中的最后一个数字,可以使用: /\d+(?= *\])/ 但是,如果输入是JSON字符串,您可以使用JSON库函数JSON.parse(string

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

例如:

[2,5,8]

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

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

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

只输出方括号。

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

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

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

如果您正在接收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]
“美化”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是手工构建的,使用算法而不是解析器,那么格式也可以改变;在任何一种情况下,您的代码都很有可能被破坏。

要获取包含在
[]
中的所有字符串的内容,正则表达式是什么?我在学习,所以问你。这将是:
/\[([^\]*)\]/
@anubhava:使用上述exp,它将获取所有方括号类型“]”之前的数字,但它不必具有起始括号“[”。也就是说,如果我们有“12323,sdasd,89]”,它将获取89。但是,如何确保它也有一个起始方括号,然后只提取数字。我将分两个步骤来完成:(对不起,我不是Ruby开发人员)。在PHP中,这将是
preg\u replace\u callback
,在步骤1中,您在
[和]
和步骤2之间获取字符串,然后用逗号将它们分开。@anubhava:非常感谢您的努力。谢谢你的帮助。
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]
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]}