Verifica che una stringa contenga un numero in Python

Jinku Hu 30 gennaio 2023
  1. Funzione Python any con str.isdigit per verificare se una stringa contiene un numero
  2. Usa la funzione map() per verificare se una stringa contiene un numero
  3. Usa re.search(r'\d') per verificare se una stringa contiene un numero
Verifica che una stringa contenga un numero in Python

Questo articolo introduce come verificare se una stringa Python contiene un numero o meno.

La funzione incorporata di Python any function insieme a str.isdigit restituirà True se la stringa data contiene un numero al suo interno; in caso contrario, restituisce False.

Il metodo di ricerca di espressioni regolari Python con pattern r'\d' potrebbe anche restituire True se la stringa data contiene un numero.

Funzione Python any con str.isdigit per verificare se una stringa contiene un numero

La funzione any restituisce True se qualsiasi elemento del dato iterable è True; in caso contrario, restituisce False.

str.isdigit() restituisce True se tutti i caratteri nella stringa data sono cifre, False in caso contrario.

any(chr.isdigit() for chr in stringExample)

Se stringExample contiene almeno un numero, allora il codice sopra restituisce True perché chr.isdigit() per chr in stringExample ha almeno un True in iterable.

  • Esempio di lavoro
str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(chr.isdigit() for chr in str1))
print(any(chr.isdigit() for chr in str2))
print(any(chr.isdigit() for chr in str3))

Produzione:

True
False
True

Usa la funzione map() per verificare se una stringa contiene un numero

Python map(function, iterable) funzione applica function a ogni elemento del dato iterable e restituisce un iteratore che fornisce il risultato di cui sopra.

Pertanto, potremmo riscrivere la soluzione di cui sopra per,

any(map(str.isdigit, stringExample))
  • Esempio di lavoro
str1 = "python1"
str2 = "nonumber"
str3 = "12345"

print(any(map(str.isdigit, str1)))
print(any(map(str.isdigit, str2)))
print(any(map(str.isdigit, str3)))

Produzione:

True
False
True

Usa re.search(r'\d') per verificare se una stringa contiene un numero

re.search(r'\d', string) pattern esegue la scansione della stringa e restituisce l’oggetto match per la prima posizione che corrisponde al modello dato - \d che significa qualsiasi numero compreso tra 0 e 9 e restituisce None se non viene trovata alcuna corrispondenza.

import re

print(re.search(r"\d", "python3.8"))
# output: <re.Match object; span=(6, 7), match='3'>

L’oggetto match contiene la doppia tupla span che indica la posizione iniziale e finale della match e il contenuto corrispondente come match = '3'.

La funzione bool() potrebbe eseguire il cast del risultato re.search dall’oggetto match o da None a True o False.

  • Esempio di lavoro
import re

str1 = "python12"
str2 = "nonumber"
str3 = "12345"

print(bool(re.search(r"\d", str1)))
print(bool(re.search(r"\d", str2)))
print(bool(re.search(r"\d", str3)))

Produzione:

True
False
True

In termini di runtime, la valutazione delle espressioni regolari è molto più veloce rispetto all’utilizzo delle funzioni stringa incorporate. Se il valore della stringa è considerevolmente grande, allora re.search() è più ottimale rispetto all’utilizzo delle funzioni stringa.

Compilare l’espressione usando re.compile() prima di eseguire la funzione search() sulle stringhe date renderà anche il tempo di esecuzione ancora più veloce.

Cattura il valore di ritorno di compile() in una variabile e chiama la funzione search() all’interno di quella variabile. In questo caso, search() avrà bisogno solo di un singolo parametro, cioè la stringa da cercare rispetto all’espressione compilata.

def hasNumber(stringVal):
    re_numbers = re.compile("\d")
    return False if (re_numbers.search(stringVal) == None) else True

In sintesi, le funzioni integrate any() e isdigit() possono essere facilmente usate insieme per controllare se una stringa contiene un numero.

Tuttavia, usando le funzioni di utilità search() e compile() all’interno del modulo delle espressioni regolari re genererà risultati più velocemente delle funzioni di stringa incorporate. Quindi, se hai a che fare con valori o stringhe di grandi dimensioni, la soluzione delle espressioni regolari è molto più ottimale delle funzioni delle stringhe.

Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Python String