I want to match cc dd
that doesn't start with aa
import re
s = 'bb cc dd ee\naa : bb cc dd ee\n11 cc dd ee'
pp = re.compile(r'(?P<n1>ee)|(?P<n2>^(?!aa\b).*\bcc dd\b)', re.MULTILINE)
def _rep(x):
print(x.groupdict())
return [f'<{k}>' for k, v in x.groupdict().items() if v is not None][0]
rr = pp.sub(_rep, s)
print(rr)
Result: Current
# print(x.groupdict())
{'n1': None, 'n2': 'bb cc dd'}
{'n1': 'ee', 'n2': None}
{'n1': 'ee', 'n2': None}
{'n1': None, 'n2': '11 cc dd'}
{'n1': 'ee', 'n2': None}
# print(rr)
<n2> <n1>
aa : bb cc dd <n1>
<n2> <n1>
Result: I want ..
# print(x.groupdict())
{'n1': None, 'n2': 'cc dd'}
{'n1': 'ee', 'n2': None}
{'n1': 'ee', 'n2': None}
{'n1': None, 'n2': 'cc dd'}
{'n1': 'ee', 'n2': None}
# print(rr)
bb <n2> <n1>
aa : bb cc dd <n1>
11 <n2> <n1>