Python, модуль re, экранирование скобок

Есть строка:

'inlet_mass_flow_pATCH1(mass_flux)inlet_mass_flow_pATCH2(mass_flux)'

Я хочу отделить 'inlet_mass_flow_pATCH1(mass_flux)' от 'inlet_mass_flow_pATCH2(mass_flux)'. Для этого использую re таким образом:

re.findall('inlet_mass_flow_.+(mass_flux)', 'inlet_mass_flow_pATCH1(mass_flux)inlet_mass_flow_pATCH2(mass_flux)')

Получаю на выходе ['mass_flux'], а хочу получить ['inlet_mass_flow_pATCH1(mass_flux)', 'inlet_mass_flow_pATCH2(mass_flux)']. Как видите, не силен в регулярных, подскажите пожалуйста, что не так делаю...


Ответы (1 шт):

Автор решения: Алексей Р

Скобки экранируются \( и \), также нужен "ленивый" квантификатор .+? (знак вопроса после +). И паттерн сделать в виде r-строки.

import re
txt = 'inlet_mass_flow_pATCH1(mass_flux)inlet_mass_flow_pATCH2(mass_flux)'
out = re.findall(r'inlet_mass_flow_.+?\(mass_flux\)',txt)
print(*out,sep='\n')
inlet_mass_flow_pATCH1(mass_flux)
inlet_mass_flow_pATCH2(mass_flux)
→ Ссылка