Mi objetivo aquí es crear un lenguaje de plantilla muy simple. Por el momento, estoy trabajando en la sustitución de una variable con un valor, como este:Estoy usando expresiones regulares de Python de manera criminalmente ineficiente
Esta entrada:
La web
debe producir este resultado:
El Web Esta es una variable de prueba
Lo tengo trabajando. Pero mirando mi código, estoy ejecutando múltiples expresiones regulares idénticas en las mismas cadenas, eso solo ofende mi sentido de la eficiencia. Tiene que haber una forma mejor, más Pythonic. (Son los dos bucles "while" los que realmente ofenden)
Esto pasa las pruebas unitarias, así que si esto es una optimización tonta prematura, dígame: estoy dispuesto a dejar esto. Puede haber docenas de estas definiciones de variables y usos en un documento, pero no en cientos. Pero sospecho que hay maneras obvias (para otras personas) de mejorar esto, y tengo curiosidad por saber qué 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
El mundo no necesita otro lenguaje de plantilla de Python. Ya existen docenas. ¿No puedes usar uno de esos? –
@Schof: te puedo mencionar en http://genshi.edgewall.org/, que hará de tu vida un pastel. – user7116
Me encanta el Título +1 por hacerme reír. – UnkwnTech