/ / Regex encontrando números separados por vírgulas entre colchetes '[]'? - rubi, regex, string

Regex encontrando números separados por vírgulas entre colchetes '[]'? - rubi, regex, corda

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 № 1

Para 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+ )
]