/ / Regex znajduje liczby oddzielone przecinkami w nawiasach „[]”? - ruby, regex, string

Regex znalazł przecinek w nawiasach "[]"? - ruby, regex, string

Muszę wyodrębnić liczby między nawiasami. Liczba liczb może ulec zmianie.

Przykład:

[2,5,8]

lub

[11]

lub

[3,7,9,12]

Muszę być w stanie wyodrębnić ostatni numer. Problem polega na tym, że plik JSON jest długi i zawiera dużo liczb i tekstu. Liczby te są jedynymi liczbami, których potrzebuję i jedynymi, które są oddzielone przecinkami, ORAZ bez spacji, ORAZ otoczone nawiasami.

Do tej pory wypróbowałem regex:

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

który wypisuje tylko nawiasy.

Odpowiedzi:

0 dla odpowiedzi № 1

Aby dopasować ostatnią liczbę w nawiasach kwadratowych, możesz użyć:

/d+(?= *])/

Jeśli jednak wejście jest łańcuchem JSON, można użyć funkcji biblioteki JSON JSON.parse(string) złapać żądany numer.


0 dla odpowiedzi nr 2

Jeśli otrzymujesz JSON, zrób właściwą i praktyczną rzecz i użyj parsera JSON, aby zwrócić dane z powrotem do obiektu, a następnie użyj normalnych metod dostępu do tego obiektu:

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 może być sformatowany inaczej niż normalne wyjście JSON, a ta różnica może zrujnować Twój dzień, jeśli spróbujesz użyć wyrażenia regularnego. Jeśli użyjesz parsera, to nie jest oczywiste:

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

Jest bardzo podobny do używania wyrażeń regularnych doparsować HTML i XML. Jeśli JSON jest budowany ręcznie, przy użyciu algorytmu zamiast parsera, wówczas formaty również mogą się zmienić; W obu przypadkach kod ma dużą szansę na złamanie.


-1 dla odpowiedzi nr 3

Działa to w celu wyodrębnienia ostatniej liczby między nawiasami.

 #  [(?:d+,)*(d+)]

[
(?: d+ , )*
( d+ )
]