Verifica che una stringa contenga un numero in Python

  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

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 iterabile.

  • 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 iterabile 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.

Articolo correlato - Python String

  • Rimuovi il primo carattere dalla stringa in Python
  • Dividi una stringa per spazi bianchi in Python