Foros del Web » Programando para Internet » Python »

Chequear si cierto valor existe dentro de una string.

Estas en el tema de Chequear si cierto valor existe dentro de una string. en el foro de Python en Foros del Web. Como puedo chequear si un valor x existe dentro de una string ? No tiene que ser case sensitive, es decir, si el valor que ...
  #1 (permalink)  
Antiguo 08/03/2014, 00:18
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 14 años, 7 meses
Puntos: 4
Chequear si cierto valor existe dentro de una string.

Como puedo chequear si un valor x existe dentro de una string ?

No tiene que ser case sensitive, es decir, si el valor que estoy buscando fuera perro deberia encontrarlo dentrode PERRO por ej.

GRacias !
  #2 (permalink)  
Antiguo 08/03/2014, 08:27
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 12 años, 6 meses
Puntos: 20
Respuesta: Chequear si cierto valor existe dentro de una string.

Hola WebDeveloperZ, disculpa si esto no es lo que pedias, recien me estoy iniciando en Python asi que pudo estar equivocado o existir una mejor forma de hacer esto.

Código Python:
Ver original
  1. palabra = "perro"
  2. # palabra = "gatoperrovaca"
  3. # palabra = "gatovacaperro"
  4. # palabra = "otro perro"
  5. x = palabra.index("perro")
  6. animal = palabra[x:len("perro")+x]
  7. print animal

Decime si no se entiende algo.
Puse otras posibilidades de strings comentados para que pruebes diferentes casos.

Saludos!
  #3 (permalink)  
Antiguo 08/03/2014, 12:22
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 9 años, 9 meses
Puntos: 35
Respuesta: Chequear si cierto valor existe dentro de una string.

Algo así?

Código Python:
Ver original
  1. >>> "mundo" in "Hola mundo!"
  2. True
  3. >>> "chau" in "Hola mundo!"
  4. False

  #4 (permalink)  
Antiguo 08/03/2014, 15:43
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Chequear si cierto valor existe dentro de una string.

Si eso, gracias a los dos.

Como hago para que busque sin importar si es mayuscula o minuscula ?

es decir:

que "mundo" in "hola MUNDO" devuelva true por ej
  #5 (permalink)  
Antiguo 08/03/2014, 18:28
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 9 años, 9 meses
Puntos: 35
Respuesta: Chequear si cierto valor existe dentro de una string.

Así:

Código Python:
Ver original
  1. >>> "MuNdO".lower() in "HOLA MUNDO!".lower()
  2. True
  #6 (permalink)  
Antiguo 08/03/2014, 19:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 16 años, 7 meses
Puntos: 1360
Respuesta: Chequear si cierto valor existe dentro de una string.

Creo que este es un caso perfecto para algo llamado expresiones regulares.

Código Python:
Ver original
  1. import re
  2. pattern = re.compile('perro', re.I)
  3. some_string = "PeRrO"
  4. if pattern.search(some_string):
  5.     print "Perro en cadena", some_string
  6. else:
  7.     print "Perro NO esta en cadena", some_string
  #7 (permalink)  
Antiguo 08/03/2014, 21:38
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Chequear si cierto valor existe dentro de una string.

Que tal es la performance ???

Pregunto porque tengo una tabla de filtros en la base de datos, palabras que no quiero permitir y cada ves que se agrega un registro hare un loop a traves de esas palabras para revisar que no esten en la data a insertarse.

Gracias !
  #8 (permalink)  
Antiguo 08/03/2014, 22:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 16 años, 7 meses
Puntos: 1360
Respuesta: Chequear si cierto valor existe dentro de una string.

Es una expresión regular simple, corriendo probablemente en algún servidor cómodamente con suficientes recursos, no debería de tener problemas.
  #9 (permalink)  
Antiguo 20/03/2014, 12:17
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Chequear si cierto valor existe dentro de una string.

Código:
            spam = Spam.objects.filter(activa = True)
            import re
            pattern = re.compile(request.POST['titulo'] + request.POST['contenido'], re.I)

            for n in spam:
                cadena = n.cadena
                if pattern.search(cadena):
                    exit()
MMm no me esta funcionando, no entra al condicional, alguna idea ??? gracias !
  #10 (permalink)  
Antiguo 20/03/2014, 15:28
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Chequear si cierto valor existe dentro de una string.

Hola WebDeveloperZ

Cita:
Pregunto porque tengo una tabla de filtros en la base de datos, palabras que no quiero permitir y cada ves que se agrega un registro hare un loop a traves de esas palabras para revisar que no esten en la data a insertarse.
Yo en lo personal no utilizaría un bucle, bueno si es que se lo puede esquivar, en si, Python es extremadamente rápido en los bucles, hace unos días probé un archivo de Trivias de preguntas y respuestas, copie y pegue todo el contenido de ese archivo en el mismo archivo e inicié un bucle y en 6 segundos buscó en 5 millones de líneas.
A lo que apunto que podés utilizar el bucle, cláro, pero si podés utilizar otro método, mejor, bueno por lo menos yo siempre trato de no usarlos, osea si es que se necesita si, pero si no, no.
Por ejemplo yo descubrí una manera de esquivarle a los bucles y que es más rápido que ellos, aunque eso no lo notarás practicamente, excepto en archivos que tengan mucha información.
Te soy sincero, jamás trabajé con base de datos, por lo menos no con MySql ni ninguna de esas, sólo con archivos en formato .txt y me ha ido bastante bien, aunque no es lo ideal para muchos casos.
Te dejo un ejemplo de como lo podrías hacer sin usar el bucle for ni el while.
Supongamos que tenés una agenda en donde almacenás contactos, Nombre y Apellido, número de teléfono, domicilio, etc.
Bueno si vos querrías buscar por ejemplo el nombre para saber si esa persona existe en el archivo, bastaría con tan sólo agregar a esa persona un guión y un espacio antes del nombre o apellido (dependiendo de que es lo que agregés primero) y al final, aunque podrías utilizar el chr(160) que es un espacio especial, un espacio de no separación.
Supongamos que en un archivo .txt almacenes algo así (por ejemplo de nombre "Nombres_Clientes"):

Martín Figueroa Domicilio numero edad
Belén María Domicilio numero edad
Nancy Domicilio numero edad
Joaquín Domicilio numero edad


yo lo dejaría asi:

- Martín Figueroa - Domicilio | numero ~ edad
- Nancy Quiroga - Domicilio | numero ~ edad
- Belén María Mendez - Mi casa | 123456789 ~ 45
- Joaquín Astrada - Domicilio | numero ~ edad



y con tan sólo hacer un código como este:

Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2.  
  3. Archivo = open("C:\Users\Daniel\Desktop\Nombres_Clientes.txt", "r")
  4. Datos = Archivo.read()
  5. Archivo.close()
  6.  
  7. Nombre_Persona = u"- Belén María Mendez -"
  8. Nombre_Persona = Nombre_Persona.encode("Windows-1252")
  9.  
  10. if Nombre_Persona.lower() in Datos.lower():
  11.     print "Si existe:" + Nombre_Persona.replace("-", "")
  12.     print "Sus datos son:"
  13.     Nombre2 = Datos.find(Nombre_Persona)
  14.     print Datos[Nombre2:Datos.find("\n", Nombre2)]
  15. else:
  16.     print "No existe la persona " + Nombre_Persona.replace("-", "")
  17.  
  18. raw_input()

Ya podrías buscar tus contactos sin usar ningún bucle.
Comento esto porque he leído muchas veces a usuarios preguntando en otros foros si "existe alguna manera de no usar el bucle for o el while", en realidad si se puede, en el ejemplo utilicé sólo 1 método, pero se pueden hacer más, hasta incluso de diferentes maneras, el secreto es pensar.
Yo por ejemplo utilizo eso muchas veces y aunque quizás para muchos eso sea un problema o un lío, para mí es muy útil.
Estos métodos los he creado yo sin ningún manual, he pensado formas de esquivarles a los bucles y lo conseguí, pero no es nada malo que utilicés un bucle, para nada, al contrarío, es lo ideal ya que para eso han sido creados.
Bueno este es un excelente método, la verdad bastante bueno, por lo menos yo casi siempre trabajé así creando mis propios métodos para acelerar la búsqueda y evitar el bucle, pero usá el bucle si querés, es rápido igual, este es sólo una forma nada más de como podrías comprobar una X cadena dentro de otra sin usar el bucle for o el while.

¿Que tan efectivo sería esto?:
En realidad eso depende para que lo necesités, si trabajás con base de datos, entónces es probable que no te servirá mi ejemplo, digo es probable porque jamás deberías cambiar MySQL por un simple archivo de texto, pero te puede servir para otros programas.
Por ejemplo yo he creado códigos para mIRC Scripting e hice un Reproductor de música que el buscador del mismo es extremadamente rápido, yo hubiera empleado un while o un goto, pero me llevaría varios segundos en encontrar los resultados, esto hubiese demorado mucho tiempo, así que empleé mi propio método y la verdad es que al presionar ENTER para buscar canciones o artistes que concuerden con lo que deseas, el resultado es inmediato, no demora nada, en el mismo segundo lo hace, muchísimas personas usarían un bucle para eso y les demoraría mucho más tiempo.

Eso es todo.
Espero que te sirva!!
Nos vemos!! Suerte!
  #11 (permalink)  
Antiguo 21/03/2014, 11:54
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Chequear si cierto valor existe dentro de una string.

Gracias por la data !!!

Etiquetas: chequear, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:42.