A maioria das perguntas que encontrei são tendenciosas pelo fato de estarem procurando letras em seus números, enquanto estou procurando por números no que eu gostaria de ser uma sequência sem número. Preciso digitar uma string e verificar se ela contém algum número e se a rejeita.
A função isdigit()
retornará apenas True
se TODOS os caracteres forem números. Eu só quero ver se o usuário digitou um número para uma frase como "I own 1 dog"
ou algo assim.
Alguma ideia?
r'-?\d+'
\d
corresponderá apenas um único dígito no intervalo0
a9
.Você pode usar uma combinação de
any
estr.isdigit
:A função retornará
True
se houver um dígito na string, caso contrárioFalse
.Demo:
fonte
any
aceita expressões geradoras.usar
Ref: https://docs.python.org/2/library/stdtypes.html#str.isalpha
fonte
'_'.isalpha()
é Falso.https://docs.python.org/2/library/re.html
Você deve usar melhor a expressão regular. É muito mais rápido.
fonte
None
Você pode aplicar a função isdigit () em todos os caracteres da String. Ou você pode usar expressões regulares.
Também encontrei Como encontro um número em uma string no Python? com maneiras muito adequadas de retornar números. A solução abaixo é da resposta nessa pergunta.
Alternativamente:
Para mais informações, consulte o documento regex: http://docs.python.org/2/library/re.html
Editar: Retorna os números reais, não um valor booleano, portanto as respostas acima são mais corretas para o seu caso
O primeiro método retornará o primeiro dígito e os dígitos consecutivos subsequentes. Assim, 1,56 será retornado como 1, 10.000 será retornado como 10. 0207-100-1000 será retornado como 0207.
O segundo método não funciona.
Para extrair todos os dígitos, pontos e vírgulas e não perder dígitos não consecutivos, use:
fonte
Você pode usar o método NLTK para isso.
Isso encontrará '1' e 'One' no texto:
fonte
Você pode fazer isso da seguinte maneira:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Usar
.isdigit()
também significa não ter que recorrer ao tratamento de exceções (tentativa / exceção) nos casos em que você precisa usar a compreensão da lista (tentativa / exceção não é possível dentro de uma compreensão da lista).fonte
Você pode usar o intervalo com contagem para verificar quantas vezes um número aparece na sequência, verificando-o no intervalo:
fonte
Estou surpreso que ninguém tenha mencionado essa combinação de
any
emap
:no python 3 é provavelmente o mais rápido (exceto talvez para expressões regulares) é porque ele não contém nenhum loop (e o apelido da função evita procurá-lo em
str
).Não use isso no python 2 como
map
retorna alist
, o que interrompe oany
curto-circuitofonte
Que tal este?
fonte
Vou deixar a resposta @zyxue um pouco mais explícita:
que é a solução com a referência mais rápida das soluções que a @zyxue propôs na resposta.
fonte
A maneira mais simples de resolver é
fonte
Esse código gera uma sequência com o tamanho n, que pelo menos contém maiúsculas, minúsculas e um dígito. Ao usar o loop while, garantimos este evento.
fonte
any
eord
pode ser combinado para atender à finalidade, conforme mostrado abaixo.Alguns pontos sobre esta implementação.
any
é melhor porque funciona como expressão de curto-circuito na linguagem C e retornará o resultado assim que possível, ou seja, no caso da string 'a1bbbbbbc' 'b' e 'c' nem serão comparados.ord
é melhor porque fornece mais flexibilidade, como números de verificação apenas entre '0' e '5' ou qualquer outro intervalo. Por exemplo, se você escrever um validador para representação hexadecimal de números, você deseja que a string tenha alfabetos no intervalo 'A' a 'F'.fonte
Isso retorna toda a sequência que contém alfabetos e números. isalpha () retorna a string com todos os dígitos ou caracteres.
fonte
Esta provavelmente não é a melhor abordagem em Python, mas como Haskeller, essa abordagem lambda / map fazia sentido para mim e é muito curta:
anydigit = lambda x: any(map(str.isdigit, x))
Não precisa ser nomeado, é claro. Nomeado que poderia ser usado como
anydigit("abc123")
, que parece o que eu estava procurando!fonte