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 № 1Aby 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+ )
]