Estoy usando expresiones regulares de Python de una manera criminal ineficiente

Mi objetivo aquí es crear un lenguaje de plantilla muy simple. En este momento, estoy trabajando para reemplazar una variable con un valor como este:

Esta entrada:

La web

Debe producir esta salida:

La Web Esta es una variable de prueba

Lo tengo funcionando. Pero mirando mi código, estoy ejecutando varias expresiones regulares idénticas en las mismas cadenas, lo que ofende mi sentido de eficiencia. Tiene que haber una forma mejor, más pitónica. (Son los dos bucles "while" los que realmente ofenden).

Esto pasa las pruebas de unidad, por lo que si se trata de una optimización prematura tonta, dígame: Estoy dispuesto a dejarlo pasar. Puede haber docenas de estas definiciones de variables y usos en un documento, pero no cientos. Pero sospecho que hay formas obvias (para otras personas) de mejorar esto, y siento curiosidad por lo que se le ocurrirá a la multitud de StackOverflow.

def stripMatchedQuotes(item):
    MatchedSingleQuotes = re.compile(r"'(.*)'", re.LOCALE)
    MatchedDoubleQuotes = re.compile(r'"(.*)"', re.LOCALE)
    item = MatchedSingleQuotes.sub(r'\1', item, 1)
    item = MatchedDoubleQuotes.sub(r'\1', item, 1)
    return item




def processVariables(item):
    VariableDefinition = re.compile(r'<%(.*?)=(.*?)%>', re.LOCALE)
    VariableUse = re.compile(r'<%(.*?)%>', re.LOCALE)
    Variables={}

    while VariableDefinition.search(item):
        VarName, VarDef = VariableDefinition.search(item).groups()
        VarName = stripMatchedQuotes(VarName).upper().strip()
        VarDef = stripMatchedQuotes(VarDef.strip())
        Variables[VarName] = VarDef
        item = VariableDefinition.sub('', item, 1)

    while VariableUse.search(item):
        VarName = stripMatchedQuotes(VariableUse.search(item).group(1).upper()).strip()
        item = VariableUse.sub(Variables[VarName], item, 1)

    return item

Respuestas a la pregunta(10)

Su respuesta a la pregunta