La mayoría de las preguntas que he encontrado están sesgadas por el hecho de que están buscando letras en sus números, mientras que estoy buscando números en lo que me gustaría que fuera una cadena sin número. Necesito ingresar una cadena y verificar si contiene algún número y si lo rechaza.
La función isdigit()
solo regresa True
si TODOS los caracteres son números. Solo quiero ver si el usuario ha ingresado un número para una oración como "I own 1 dog"
o algo así.
¿Algunas ideas?
r'-?\d+'
\d
solo coincidirá con un solo dígito en el rango0
de9
.Puede usar una combinación de
any
ystr.isdigit
:La función volverá
True
si existe un dígito en la cadena, de lo contrarioFalse
.Manifestación:
fuente
any
acepta expresiones generadoras.utilizar
Ref: https://docs.python.org/2/library/stdtypes.html#str.isalpha
fuente
'_'.isalpha()
es falso.https://docs.python.org/2/library/re.html
Deberías usar mejor la expresión regular. Es mucho mas rapido.
fuente
None
Puede aplicar la función isdigit () en cada carácter de la cadena. O podrías usar expresiones regulares.
También encontré ¿Cómo encuentro un número en una cadena en Python? con formas muy adecuadas para devolver números. La solución a continuación es de la respuesta en esa pregunta.
Alternativamente:
Para obtener más información, consulte el documento regex: http://docs.python.org/2/library/re.html
Editar: Esto devuelve los números reales, no un valor booleano, por lo que las respuestas anteriores son más correctas para su caso
El primer método devolverá el primer dígito y los siguientes dígitos consecutivos. Por lo tanto, 1.56 se devolverá como 1. 10.000 se devolverá como 10. 0207-100-1000 se devolverá como 0207.
El segundo método no funciona.
Para extraer todos los dígitos, puntos y comas, y no perder dígitos no consecutivos, use:
fuente
Puede usar el método NLTK para ello.
Esto encontrará tanto '1' como 'Uno' en el texto:
fuente
Puede lograr esto de la siguiente manera:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Usar
.isdigit()
también significa no tener que recurrir al manejo de excepciones (try / except) en los casos en que necesite usar la comprensión de la lista (try / except no es posible dentro de una comprensión de la lista).fuente
Puede usar el rango con conteo para verificar cuántas veces aparece un número en la cadena al compararlo con el rango:
fuente
Me sorprende que nadie haya mencionado esta combinación de
any
ymap
:en python 3 es probablemente el más rápido allí (excepto tal vez para expresiones regulares) es porque no contiene ningún bucle (y aliasing la función evita buscarlo en
str
).No use eso en python 2 como
map
devuelve alist
, que rompeany
el cortocircuitofuente
¿Qué hay de este?
fuente
Haré que la respuesta @zyxue sea un poco más explícita:
cuál es la solución con el punto de referencia más rápido de las soluciones que @zyxue propuso en la respuesta.
fuente
La forma más simple de resolver es como
fuente
Este código genera una secuencia con tamaño n que al menos contiene mayúsculas, minúsculas y un dígito. Al usar el ciclo while, hemos garantizado este evento.
fuente
any
yord
se puede combinar para cumplir el propósito que se muestra a continuación.Un par de puntos sobre esta implementación.
any
es mejor porque funciona como expresión de cortocircuito en lenguaje C y devolverá el resultado tan pronto como se pueda determinar, es decir, en el caso de la cadena 'a1bbbbbbc' 'b' y 'c' ni siquiera se compararán.ord
es mejor porque brinda más flexibilidad como números de cheques solo entre '0' y '5' o cualquier otro rango. Por ejemplo, si escribiera un validador para la representación hexadecimal de números, desearía que la cadena tuviera alfabetos en el rango 'A' a 'F' solamente.fuente
Esto devuelve toda la cadena que tiene tanto alfabetos como números. isalpha () devuelve la cadena con todos los dígitos o todos los caracteres.
fuente
Probablemente este no sea el mejor enfoque en Python, pero como Haskeller, este enfoque lambda / mapa tenía mucho sentido para mí y es muy corto:
anydigit = lambda x: any(map(str.isdigit, x))
No necesita ser nombrado, por supuesto. Nombrado podría usarse como
anydigit("abc123")
, ¡lo que se siente como lo que estaba buscando!fuente