мне нужно, чтобы соответствовать два типа строки, например, как показано ниже (разбор файла заголовка)RegEx ИЛИ оператор не работает в Python
txt='''\
STDMETHOD_(MyFunc)(
D2D1_SIZE_U size,
_In_opt_ CONST void *srcData,
) PURE;
STDMETHOD(MyFunc2)(
_In_opt_ CONST void *srcData2,
UINT32 pitch2,
) PURE;\
STDMETHOD_(void, GetFactory)(
_Outptr_ ID2D1Factory **factory
) CONST PURE;
'''
matches = re.findall(r'(\bSTDMETHOD\b((.|\n|\r)*?)\bPURE\b)|(\bSTDMETHOD_\b((.|\n|\r)*?)\bPURE\b)',txt, flags=re.DOTALL | re.M)
print matches
В сущности, я хочу, чтобы объединить эти два регулярных выражений:
r'(\bSTDMETHOD\b((.|\n|\r)*?)\bPURE\b)'
r'(\bSTDMETHOD_\b((.|\n|\r)*?)\bPURE\b)'
, но оператор OR не работает. Что мне ошибок в том, что если я вставляю их как
(\bSTDMETHOD\b((.|\n|\r)*?)\bPURE\b)|(\bSTDMETHOD_\b((.|\n|\r)*?)\bPURE\b)
в Notepad ++ или VisualStudio это найти спички propely, но в Python я получаю кучу пустых строк, повторяющихся строк, пропуская ключевые слова _STDMETHOD
и т.д. .. вот вывод:
[stdout:][
(
'',
'',
'',
'STDMETHOD_(MyFunc)(\nD2D1_SIZE_U size,\n_In_opt_ CONST void *srcData,\n) PURE',
'(MyFunc)(\nD2D1_SIZE_U size,\n_In_opt_ CONST void *srcData,\n) ',
' '
),
(
'STDMETHOD(MyFunc2)(\n_In_opt_ CONST void *srcData2,\nUINT32 pitch2, \n) PURE',
'(MyFunc2)(\n_In_opt_ CONST void *srcData2,\nUINT32 pitch2, \n) ',
' ',
'',
'',
''
),
(
'',
'',
'',
'STDMETHOD_(void, GetFactory)(\n_Outptr_ ID2D1Factory **factory\n) CONST PURE',
'(void, GetFactory)(\n_Outptr_ ID2D1Factory **factory\n) CONST ',
' '
)
]
Если кто-нибудь может заметить ошибку, я очень благодарен.
Попробуйте положить круглые скобки вокруг всего регулярного выражения. –
'| ** работает **, но у вас есть несколько групп захвата в выражении ... – jonrsharpe
Результат, который я ищу в этом случае, - это всего лишь три функции, хорошо подобранные в списке, такие как: [' STDMETHOD_ (MyFunc) (D2D1_SIZE_U размер, _In_opt_ CONST void * srcData,) PURE ',' STDMETHOD (MyFunc2) (_ In_opt_ CONST void * srcData2, UINT32 pitch2,) PURE ',' STDMETHOD_ (void, GetFactory) (_ Outptr_ ID2D1Factory ** завод) CONST PURE '] – gmmo