Si desea comprobar si hay algo que coincide con una expresión regular, si es así, imprimir el primer grupo, lo hace ..Alternativa al `match = re.match(); si coinciden: ... 'idiom?
import re
match = re.match("(\d+)g", "123g")
if match is not None:
print match.group(1)
Esto es completamente pedante, pero el match
variable intermedia es un poco molesto ..
lenguajes como Perl hacen esto mediante la creación de nuevos $1
.. $9
variables para grupos de partidos, como ..
if($blah ~= /(\d+)g/){
print $1
}
with re_context.match('^blah', s) as match:
if match:
...
else:
...
..which pensé que era una idea interesante, así que escribió una implementación sencilla de la misma:
#!/usr/bin/env python2.6
import re
class SRE_Match_Wrapper:
def __init__(self, match):
self.match = match
def __exit__(self, type, value, tb):
pass
def __enter__(self):
return self.match
def __getattr__(self, name):
if name == "__exit__":
return self.__exit__
elif name == "__enter__":
return self.__name__
else:
return getattr(self.match, name)
def rematch(pattern, inp):
matcher = re.compile(pattern)
x = SRE_Match_Wrapper(matcher.match(inp))
return x
return match
if __name__ == '__main__':
# Example:
with rematch("(\d+)g", "123g") as m:
if m:
print(m.group(1))
with rematch("(\d+)g", "123") as m:
if m:
print(m.group(1))
(Esta funcionalidad teóricamente podrían ser parcheadas en el objeto _sre.SRE_Match
)
Se Sería bueno si pudiera saltear la ejecución del bloque de código de la instrucción with
, si no hubiera coincidencia, lo que simplificaría esto a ...
with rematch("(\d+)g", "123") as m:
print(m.group(1)) # only executed if the match occurred
..pero esto parece imposible basa de lo que puedo deducir de PEP 343
¿Alguna idea? Como dije, esto es realmente una molestia trivial, casi hasta el punto de ser código de golf.
"casi hasta el punto de ser código de golf" no están de acuerdo. Esto es totalmente código de golf. No se puede ver qué es "molesto" sobre la configuración de una variable para representar el cambio de estado. –
Dije que estaba siendo pedante ... – dbr
Discusión similar ya en SO: http://stackoverflow.com/questions/447086/pythons-re-module-saving-state –