使用regex解析winerror.h&ntstatus.h状态/定义

2024-10-01 22:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python中创建一个regex,从winerror.h&NTSTATUS.h捕获所有最后的错误、HRESULT和NTSTATUS防御:

例如,对于本文:

//
// MessageId: NTE_BAD_PROV_TYPE
//
// MessageText:
//
// Invalid provider type specified.
// More data is avaiable on bla bla.
//
#define NTE_BAD_PROV_TYPE                _HRESULT_TYPEDEF_(0x80090014L)

我想捕捉:

('Invalid provider type specified. More data is avaiable on bla bla.', 'NTE_BAD_PROV_TYPE', 0x80090014)


ntstatus.h也是如此:

^{pr2}$

Tags: httpwwwtypeproviderbadspecifiedblainvalid
2条回答

我认为这已经足够接近了:

re.findall(r"(?<=// )(?:Message\w{2,4}:)? ?(.+)?\n", text)+list(re.search(r"(0x\d+)", text).groups())

['NTE_BAD_PROV_TYPE', '', 'Invalid provider type specified.', 'More data is avaiable on bla bla.', '0x80090014']

这就是我最终找到并使用的正则表达式:

要捕获winerror.h中的所有最后错误和结果定义:

//\sMessageText:[\n\r]+//\s*[\n\r]+
(?P<message_text>//.*?//\n)*.*?
#define\s(?P<status_name>[A-Za-z0-9]+)
\s+(?:_HRESULT_TYPEDEF_\(|NDIS_ERROR_TYPEDEF_\()?
(?P<status_value>(?:0[xX])?[A-Fa-f0-9]+)L

要捕获ntstatus.h中的所有NTSTATUS定义:

^{pr2}$

之后,我还通过将//替换为新行来格式化描述(消息文本)。在

相关问题 更多 >

    热门问题