Estoy tratando de hacer coincidir una palabra "Ninguna" y, si no la encuentro, necesito hacer una excepción. He intentado con el siguiente código de Python.

    import re

    text = "None"

    match1 = re.match('.*None', text)
    mat1 = ['None']

    if match1 == mat1:
        print "match found"
    if match1 != mat1:
        raise Exception('Not found...')

Pero siempre obtengo el siguiente error:

    C:\Users\test\Desktop>python test.py
      Traceback (most recent call last):
        File "test.py", line 25, in <module>
          raise Exception('Not found...')
    Exception: Not found...

    C:\Users\test\Desktop>

¿Alguien puede guiarme para solucionar esto?

0
rcubefather 10 dic. 2015 a las 12:39

4 respuestas

La mejor respuesta

¿Necesitas absolutamente usar regex?

Esto parece más fácil:

if "None" not in text:
    raise Exception('Not found...')

Por supuesto, esto solo coincide con un literal "Ninguno" y no p. "ninguna". Pero ese es el caso de su expresión regular también ...

2
mirosval 10 dic. 2015 a las 09:48

El problema es con la forma en que se asume el valor de retorno re.match

re.match('.*None', text)

de la documentación

re.match (patrón, cadena, banderas = 0)

Si cero o más caracteres al comienzo de la cadena coinciden con el patrón de expresión regular, devuelve una instancia MatchObject correspondiente. Devuelve None si la cadena no coincide con el patrón; tenga en cuenta que esto es diferente de una coincidencia de longitud cero.

Por lo tanto, if match1 == mat1: siempre es falso porque mat1 = ['None'] por lo tanto, siempre obtiene su excepción.

1
saikumarm 10 dic. 2015 a las 09:47

Cuando se utilizan expresiones regulares, el resultado de un método match es un objeto de coincidencia con el que realiza otros métodos. Incluso puede compararlo directamente en un condicional if-else para verificar si se realizó alguna coincidencia.

Si realmente desea utilizar RE, la forma correcta de hacerlo es:

if match1:
    print 'Match found'
else:
    raise Exception('Not found...')

Una forma probablemente más fácil de verificar si None existe en una oración es usar el operador in:

if 'None' in text:
    print 'Found None'
else:
    raise Exception('None not found')

La documentación de Python sobre expresiones regulares proporciona ejemplos simples que lo ayudan a comprender cómo para usar este módulo.

3
Matheus Portela 10 dic. 2015 a las 09:45

re.match devuelve un objeto de coincidencia, no una lista.

import re

text = "None"

match1 = re.match('.*None', text)

if not match1:
    raise Exception('Not found...')
print(match1.group(0))
2
Dan D. 10 dic. 2015 a las 09:44