2015-08-12 3 views
0

Мне нужен совет в атаке на эту проблему, я в тупике и не знаю, с чего начать. Я не хочу, код я просто нужен советИзвлечение имен переменных словаря в файле python с использованием Regex

Вопрос заключается в следующем:

использовать регулярные выражения для извлечения всех имен переменных, которые получают назначены в словарь или набор литералов из Программа Python размещена в файле code.py. Переменные Python соответствуют регулярному выражению \ w + в Python (см. Документацию о \ w). Словарь и набор литералов начинаются с открытой squiggly brace ({).

Например, если эта программа Python:

code.py

# Here is a Python file. 
names = {} 
foo = [] 
names[0] = 12 
christmas ={ 
    'tree': 'green', 
    'candy cane': 'red and white' 
} 

def yes(): 
    return "yes" 

ваша программа должна производить этот вывод:

names 
christmas 

Имена переменных должны быть напечатаны в порядке что они появляются в файле. Код Python будет синтаксически корректным, но не обязательно исполняемым без ошибок.

Итак, у меня есть этот код.py, состоящий из вышеуказанного кода и моего нового файла, называемого program.py, где мне нужно прочитать содержимое code.py и вывести имена переменных для всех словарей. Это означает, что если code.py изменится, и в него будет добавлено намного больше словарей, все равно вывести все из них по порядку.

Пояснения относительно того, что делает то, что очень поможет!

+0

Это, очевидно, домашнее задание. Но в любом случае - это все о регулярном выражении, которое нужно создать. program.py будет читать в code.py (см. функцию python 'open'), тогда вам нужно будет найти вещи, которые выглядят как словари (бит с' {} '). См. Документы модуля python 're'. –

+0

Я получил его в основном, работая, когда я печатаю его сейчас, он будет выводиться. ('names',) ('christmas',) вместо чистого вывода. есть ли способ сделать это по-другому, поэтому он просто выводит «имена» и «рождество». –

ответ

1

Вы можете использовать это регулярное выражение

(\w*)\s*=\s*{(?:.|\n)*?} 

Как

(\w*) #match the dict name (any alphanumeric character and _) and capture it 
\s*=\s* #match '=' with any amount of space around it 
{ # match '{' 
(?:.|\n)*? # match any dict defintion over couple of lines 
} # match '}' 

Вы можете проверить это here

+0

Не могли бы вы объяснить, что делают каждый? например, почему существует пробел после =, im немного запутался со всеми этими регулярными выражениями. Спасибо –

+0

Я добавил несколько советов. – Chaker

Смежные вопросы