2010-04-23 12 views
8

He siguientes:Python: lista y cadena que coincide con

temp = "[email protected]+" 

lists = ["abc", "123.35", "xyz", "AND+"] 

for list in lists 
    if re.match(list, temp, re.I): 
    print "The %s is within %s." % (list,temp) 

El re.match sólo es coincidir con el principio de la cadena, ¿Cómo me subcadena coincidente en el medio también.

Respuesta

14

Puede usar re.search en lugar de re.match.

También parece que en realidad no necesita expresiones regulares aquí. Su expresión regular 123.35 probablemente no haga lo que espera porque el punto coincide con cualquier cosa.

Si este es el caso, entonces puede hacer una contención de cadena simple usando x in s.

+0

Sí, el tuyo es 5 segundos más rápido en realidad, +1 – YOU

12

Uso re.search o simplemente utilizar en if l in temp:

Nota: tipo incorporado list no debe ser la sombra, por lo for l in lists: es mejor

+0

Tendría que aceptar que la coincidencia de subcadenas simple 'in' es mucho más fácil que re.search. – fantabolous

0

Esto se puede hacer con un cheque de un poco más compleja usando map y any.

>>> temp = "[email protected]+" 
>>> lists = ["abc", "123.35", "xyz", "AND+"] 
>>> any(map(lambda match: match in temp, lists)) 
True 
>>> temp = 'fhgwghads' 
>>> any(map(lambda match: match in temp, lists)) 
False 

No estoy seguro de si esto es más rápido que una expresión regular compilada.

Cuestiones relacionadas