用正则expression式parsingwinerror.h&ntstatus.h状态/定义

我试图在Python中创build一个正则expression式来捕获winerror.h和ntstatus.h中的所有最后错误,HRESULT和NTSTATUS defenitions:

  • http://www.carrona.org/winerror.html
  • http://www.codemachine.com/downloads/win71/ntstatus.h

例如,对于这个文本:

// // 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

 // // MessageId: STATUS_NOT_ALL_ASSIGNED // // MessageText: // // Indicates not all privileges or groups referenced are assigned to the caller. // This allows, for example, all privileges to be disabled without having to know exactly which privileges are assigned. // #define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS)0x00000106L) 

我觉得这足够接近:

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所有最新错误和HRESULT定义:

 //\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定义:

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

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