[Python-es] regex

chakalinux chakalinux en gmail.com
Jue Ene 27 22:14:07 CET 2011


Tan mal me explico ? a ver. quería buscar una cadena teniendo en cuenta unos
patrones, los patrones pueden variar su orden (a, b, c OR b, c, a OR c, b ,a
[...]) peor ya lo he resuelto.

Es un programa para el irc que conecta a una base de datos sqlite3 y
responde según la pregunta, por ejemplo:

pepito: Que es ubuntu?
bot: pepito, http://es.wikipedia.org/wiki/Ubuntu

La respuesta del bot es automática, en este caso los patrones son: "que es
ubuntu", si el usuario pepito hubiera preguntado:

pepito: ubuntu ... y eso que es ?

La respuesta sería la misma, a eso me refería antes con independientemente
del orden buscar la cadena. La función es esta:



def SearchQuestion(name):
    cnn = sqlite3.connect("db/profe.db")
    pexc = cnn.cursor()

    patron, msg = pexc.execute(u'SELECT patron, respuesta FROM
profe;').fetchone()
    cnn.close()
    name = name.rstrip("?").rstrip("¿")

    cicle = False

    if patron:

        for word in patron.split():
            for word2 in name.split():
                if word2 == word:
                    cicle = True
                    break

            if not cicle:return None
            cicle = False

        return msg

    return None


Un saludo y perdona si no me explique correctamente.


El 27 de enero de 2011 19:06, Jose Caballero <jcaballero.hep en gmail.com>escribió:

>
>
> El 27 de enero de 2011 12:27, chakalinux <chakalinux en gmail.com> escribió:
>
> Hola, intento buscar palabras en una cadena usando regexp, a ver si me
>> explico, si tengo por ejemplo esta cadena:
>>
>> cad = u"hola como están"
>>
>> Quiero que me re me encuentre la cadena cad (puede variar)
>> independientemente de su posición, (creo que se llama lookahead), o sea:
>>
>> "como estan ustedes hola" => true
>> "hola, ustedes estan bien ? como están" => true
>> [...]
>>
>> Solo he llegado a esto:
>>
>> re.match("(?=.*hola)(?=.*como)(?=.*est.n)", cad)
>>
>> Esto me funciona pero no me interesa ya que me devuelve siempre true
>> aunque ponga: "<algo>hola <algo>como <algo>estan" y si quito ".*" no me
>> funciona y solo me interesa que encuentra las palabras exactas
>> independientemente del orden que estén.
>>
>> ...
>>
>>
>
> No he entendido nada.
>
> A ver si me aclaro...
>
> Tienes una cadena inicial, por ejemplo c1="hola como estan".
> Luego tienes una segunda cadena c2.
> Y ahora quieres ...
>
> (1) saber is c1 es parte de c2.
> (2) saber si todas las palabras de c1 estan en c2.
> (3) saber si alguna de las palabras de c1 esta en c2.
> (4)...
>
>
>
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110127/8d199e49/attachment.html>


Más información sobre la lista de distribución Python-es