Простой Ruby Regex для строки JSON - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть следующая простая строка JSON:

{\"exclude\"=>[4, 5, 6, 10], \"include\"=>[]}

и я хотел бы извлечь каждое число из массива после слова "исключить". Другими словами, я ожидаю, что мой 0-й матч будет состоять из всех чисел, мой первый матч будет 4, мой второй 5 и так далее. Большое спасибо.

Ответы [ 3 ]

1 голос
/ 11 апреля 2011

Возможно, нет ни одного аккуратного регулярного выражения, на которое вы могли бы надеяться:

s = '{\"exclude\"=>[4, 5, 6, 10], \"include\"=>[]}'

all_numbers = s[/\[[\d,\s]+\]/]
# => "[4, 5, 6, 10]"

all_numbers.scan(/\d+/).map { |m| m.to_i }
# => [4, 5, 6, 10]

# Depends how much you trust the regex that grabs the result for all_numbers.
eval(all_numbers)
# => [4, 5, 6, 10]

# As a one-liner.
s[/\[[\d,\s]+\]/].scan(/\d+/).map { |m| m.to_i } # => [4, 5, 6, 10]
0 голосов
/ 12 апреля 2011

Как указывает DigitalRoss, ваша строка не содержит JSON, но, по-видимому, простой код Ruby.

Вы можете легко оценить его и получить к нему доступ просто:

lStr = "{\"exclude\"=>[4, 5, 6, 10], \"include\"=>[]}"

# Evaluate the string: you get a map
lMap = eval(lStr)
# => {"exclude"=>[4, 5, 6, 10], "include"=>[]}

# Read the properties
lMap['exclude']
# => [4, 5, 6, 10]
lMap['include']
# => []
lMap['exclude'][2]
# => 6
0 голосов
/ 11 апреля 2011

если бы я действительно использовал здесь регулярные выражения, я бы сделал что-то вроде этого:

string = "{\"exclude\"=>[4, 5, 6, 10], \"include\"=>[]}"

exclude, include = string.scan(/(\[[\d,\s]{0,}\])/).map {|match| eval match.first}

exclude # => [4, 5, 6, 10]
include # => []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...