Регулярные выражения будут отлично работать примерно в 90% случаев, а затем будут вызывать бесконечные головные боли для оставшихся 10%.
Головные боли случаются в тех случаях, когда код C содержит синтаксис, о котором вы не задумывались при написании своих регулярных выражений. Затем вы возвращаетесь и понимаете, что C не может быть проанализирован регулярными выражениями, и жизнь становится невеселой.
Попробуйте перевернуть его: определите свой собственный простой формат, который допускает меньше трюков, чем делает C, и сгенерируйте из файла как заголовочный файл C, так и код интерфейса Python:
define socketopts
int16 port
int32 ipv4address
int32 flags
Тогда вы можете легко написать Python, чтобы преобразовать это в:
typedef struct {
short port;
int ipv4address;
int flags;
} socketopts;
, а также для создания класса Python, который использует struct
для упаковки / распаковки трех значений (возможно, два из них с прямым порядком байтов, а другой - с прямым порядком байтов, до вас).