bits = bytearray(len(text))
for pat in patterns:
    for m in re.finditer(pat, text):
        bits[m.start():m.end()] = 'x' * (m.end() - m.start())
new_string = ''.join(c for c, bit in zip(text, bits) if not bit)
Combining multiple regex substitutions