2012-06-04 4 views
1

У меня есть заголовочный файл C с большим количеством перечислений, typedefs и прототипов функций. Я хочу извлечь эти данные с помощью регулярного выражения Python (re). Мне очень нужна помощь в синтаксисе, потому что я постоянно забываю об этом каждый раз, когда я учусь.Python regex для извлечения данных из файла заголовка C

ENUMS 
----- 
enum 
{ 
(tab character)(stuff to be extracted - multiple lines) 
}; 

TYPES 
----- 
typedef struct (extract1) (extract2) 


FUNCTIONS 
--------- 
(return type) 
(name) 
(
(tab character)(arguments - multiple lines) 
); 

Если бы кто-нибудь мог указать мне в правильном направлении, я был бы благодарен.

+0

что у вас есть до сих пор с точки зрения вашего re? – Levon

+1

Вы еще не посмотрели на h2py? –

+0

'regex = re.compile (" enum \ n {(. *)} ", Re.DOTALL)'. Я думал, что я получу все символы в перечислениях, в массиве, но я все получаю. Кроме того, это для Китона. –

ответ

3

Я думаю, что-то вроде этого - то, что вам нужно?

>>> re.findall('enum\s*{\s*([^}]*)};', 'enum {A,B,C};') 
['A,B,C'] 
>>> re.findall("typedef\s+struct\s+(\w+)\s+(\w+);", "typedef struct blah blah;") 
[('blah', 'blah')] 

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

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