Preciso extrair os números entre colchetes. O número de números pode mudar.
Exemplo:
[2,5,8]
ou
[11]
ou
[3,7,9,12]
Preciso extrair o último número.O problema é que o arquivo JSON é longo e contém muitos números e texto. Esses números são os únicos que preciso e os únicos separados por vírgulas E sem espaços E entre colchetes.
Até agora, tentei o regex:
info.scan(/(d,)+(d?)]/)
que está gerando apenas os colchetes.
Respostas:
0 para resposta № 1Para corresponder ao último número entre colchetes, você pode usar:
/d+(?= *])/
No entanto, se a entrada for uma string JSON, você pode usar a função de biblioteca JSON JSON.parse(string)
para pegar o número desejado.
0 para resposta № 2
Se você estiver recebendo JSON, faça a coisa certa e prática e use o analisador JSON para retornar os dados de volta para um objeto e, em seguida, use os métodos normais desse objeto para acessar seus elementos:
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 "embelezado" pode ser formatado de maneira diferente da saída JSON normal, e essa diferença pode arruinar seu dia se você estiver tentando usar uma expressão regular. Se você usar um analisador, não será difícil:
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]}
É muito semelhante a usar expressões regulares paraanalisar HTML e XML. Se o JSON estiver sendo construído manualmente, usando um algoritmo em vez de um analisador, os formatos também podem mudar; Em ambos os casos, seu código tem uma grande chance de quebrar.
-1 para resposta № 3
Isso funciona para extrair o último número entre os colchetes.
# [(?:d+,)*(d+)]
[
(?: d+ , )*
( d+ )
]