HOWTO · Python

Controlla se una stringa contiene Word in Python

L'istruzione if/in può essere utilizzata per verificare se una parola specificata è all'interno di una variabile stringa o meno in Python.

In questa pagina

Per verificare se del testo compare in una stringa Python, usa l’operatore in. Restituisce un valore booleano e distingue tra maiuscole e minuscole.

Usa l’istruzione if/in in Python per verificare se una stringa contiene una parola

Per un semplice controllo di sottostringa, usa direttamente in in una condizione if. Restituisce un valore booleano e il confronto distingue tra maiuscole e minuscole.

text = "This contains a word"
if "word" in text:
    print("Found")
else:
    print("Not Found")

L’operatore verifica se una sequenza di caratteri compare in qualsiasi punto della stringa. Non richiede che corrisponda a una parola intera: "is" in "This" è vero perché quei caratteri si trovano alla fine di This. Questo comportamento può produrre un falso positivo se vuoi trovare una parola distinta.

Se le parole sono separate soltanto da spazi normali, aggiungere uno spazio a ciascuna estremità e cercare il termine racchiuso tra spazi può essere una soluzione rapida: " is " in (" " + text + " "). Questo approccio non gestisce in modo uniforme la punteggiatura, le tabulazioni, le interruzioni di riga o altri separatori. Se questi separatori sono rilevanti, usa un’espressione regolare con confini di parola oppure suddividi il testo in token.

Usa il metodo find() in Python per verificare se una stringa contiene una parola

Anche find() cerca una sottostringa e restituisce il suo primo indice iniziale. Se non trova il testo cercato, restituisce -1. Confronta esplicitamente il risultato con -1; non usare l’indice stesso come condizione. L’indice 0 è considerato falso, mentre -1 è considerato vero.

text = "word appears here"
position = text.find("word")
if position != -1:
    print("Found at index", position)
else:
    print("Not Found")

In questo modo viene riconosciuta correttamente anche una corrispondenza all’inizio della stringa. Come in, find() cerca una sottostringa, non una parola intera. Sceglilo quando ti serve conoscere la posizione oltre a verificare la presenza del testo.

Usa le espressioni regolari in Python per verificare se una stringa contiene una parola

Usa re.search() quando la ricerca richiede un modello, per esempio per trovare un termine delimitato da confini di parola. In un’espressione regolare, \b indica il passaggio tra un carattere di parola e un carattere che non lo è.

import re

text = "This contains a word."
if re.search(r"\bword\b", text):
    print("Found")
else:
    print("Not Found")

Il modello raw r"\bword\b" trova word come parola distinta secondo le regole \w di Python. Queste regole potrebbero non corrispondere alla definizione di parola adottata da ogni applicazione, soprattutto quando servono una tokenizzazione specifica o confini dipendenti dalla lingua. Per i normali controlli di sottostringa, in è più semplice.

Usa il metodo index() con la gestione delle eccezioni in Python per verificare se una stringa contiene una parola

index() restituisce il primo indice corrispondente, proprio come find(), ma se la sottostringa non è presente solleva ValueError invece di restituire -1. Gestisci questa eccezione quando l’assenza è una possibilità prevista e l’indice è utile se la corrispondenza esiste.

text = "This contains a word"
try:
    position = text.index("word")
    print("Found at index", position)
except ValueError:
    print("Not Found")

Il blocco try gestisce una ricerca riuscita; il blocco except ValueError gestisce una sottostringa non trovata. Se ti serve soltanto un valore booleano, in esprime l’intento in modo più diretto.

Conclusione

Usa in per verificare la normale presenza di una sottostringa e ricorda che distingue tra maiuscole e minuscole e può trovare caratteri all’interno di una parola più lunga. Usa un modello re.search() con confini di parola quando la sua definizione di parola è adatta al testo. Scegli find() se ti serve un indice e vuoi ottenere -1 quando il testo non è presente, oppure index() se vuoi gestire una mancata corrispondenza tramite ValueError.