Как сопоставить ключ с помощью регулярных выражений в JSON - PullRequest
0 голосов
/ 25 июня 2019

У меня есть структура JSON.я хочу сопоставить ключ, если этот ключ соответствует регулярному выражению, он должен пропустить этот ключ и перейти к следующему ключу и должен напечатать содержимое этого ключа

Это моя структура json

, если регулярное выражение соответствуетс ключом, который начинается с 1. (a) условие такого рода ничего не должно делать и переходить к ключу 2

, если ключ начинается с этого условия, необходимо пропустить этот ключ

1. (a) 
data={
  "Name": "Sender",
  "subject": {
    "0": "subject",
    "1": {
      "1. (a) This subject ": {
        "(a) includes": [],
        "(b) srind": [],
        "(c) culture": []
      }
      },
      "2": {
      "2. This subject ": {
        "(a) includes": [],
        "(b) srind": [],
        "(c) culture": []

      }
    }
  }
}
import re

regex=r"[0-9]+\.\(.*\).*"
match=re.match(regex,s.keys())

if match:
    continue

Он должен печатать только эти

       "(a) includes": [],
        "(b) srind": [],
        "(c) culture": []

1 Ответ

0 голосов
/ 25 июня 2019

Насколько вам известно, ваш вопрос касается обхода ключей python.Вот рекурсивный генератор:

# traverse dictionary generates all of keys including subdicts
def get_keys(dct):
  for key, val in dct.items():
    if isinstance(val, dict):  # Depth first
      yield from get_keys(val)
    yield key

# filter keys
result = [k for k in get_keys(data) if not re.match(r"[0-9]+\.\(.*\).*", k)]

для вас результат данных будет:

['Name',
 '0',
 '(a) includes',
 '(b) srind',
 '(c) culture',
 '1',
 '(a) includes',
 '(b) srind',
 '(c) culture',
 '2',
 'subject']

это все ключи в dict, не соответствующие шаблону.

...