Замена цифр на регулярках
Независимо от среды выполнения нет возможности средствами самого regexp посчитать всё это дело. Надо получать строку (или части, распознанные регуляркой), считать и формировать готовую строку на выход.
Как вариант, в JS есть метод с callback: String.replace(<expression>,function(value){}). Callback вызывается для каждого совпадения, и само совпадение заменяется значением, которое возвращает функция.
Набросал вариант для Python.

#!/usr/bin/env python2

import re

with open("source_raw.txt") as f:
    source_raw=f.read()

def repl(m):
    def fix(v, delta=50):
        n = int(v) - delta
        return n if n >= 0 else 0

    return "rgb({r},{g},{b})".format(r=m.group(1), g=fix(m.group(2)), b=fix(m.group(3)))

source=re.sub(r'rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)', repl, source_raw)

with open("source.txt", "w") as f:
    f.write(source)

