2014-01-10 2 views
0

Я хочу найти и сопоставить директиву #include в программах на C и скопировать их.Python regex подходящая пара котировок или «<>»

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

#include <stdlib.h> 
#include "mylib.h" 

и копию его для дальнейшей обработки.

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

Так что все у меня есть re.compile(r"\s*#\s*include\s*")

Спасибо за советы.

ответ

2
data = """ 
#include <stdlib.h> 
#include "mylib.h" 
""" 
import re 
pattern = re.compile("#\s*include\s*(?:<.*?>|\".*?\")") 
print pattern.findall(data) 

Выход

['#include <stdlib.h>', '#include "mylib.h"'] 
+0

Я думаю, что даков не хочет иметь '<>" 'в матче;) – sphere

+0

@sphere mmmm Я считаю, что он хочет использовать одно и то же выражение для соответствия обеим строкам. – thefourtheye

+0

На самом деле я хочу всю строку, даже с директивой '# include', поэтому она присутствует в регулярном выражении, которое я разместил в вопросе :) – dakov

0

Следующий шаблон соответствует:

#include [<"]\w+?\.h[>"]

+0

Не будет ли этот шаблон также соответствовать «#include» foo.h> Просто знаю, что это не должно появляться в программах на C. – EarlGrey

+0

Это справедливая точка, но если это произойдет, файл c не будет компилироваться (что-то я предполагал, что это будет) –

0

альтернатива, просто потому, что редко можно увидеть любые примеры выражения (?(id/name)yes|no) в использовании:

#\s*include\s*(?:(<)|("))\w+(\.\w+)?(?(1)>|") 
Смежные вопросы