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]}