Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

REGEX Estrarre numeri da stringa

DRDLCN (8070 points)
27 68 104
in Info sul corso e sugli esami by (8.1k points)
Sto cercando di estrarre numeri lunghi 4 cifre es. 1234 da un stringa

per adesso uso findall ma funziona solo con alcune stringhe, per esempio non mi funziona se il numero si trova all'inizio

come posso procedere?
1.7k views

2 Answers

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Che cosa hai usato per cercare? Comunque ti consiglio di usare regex solo per la durata dei film, il resto si può fare anche senza
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Puoi splittare alla virgola e prendere gli ultimi 4 caratteri
DRDLCN (8070 points)
27 68 104
by (8.1k points)
si puo' usare regex per calcolare la durata del film?

Sotto il metodo eta era esplicitamente scritto mentre sotto il metodo durata no...
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ah ero convinto si potesse. Allora forse ho sbagliato a usarlo...
v
val9 (9770 points)
6 30 53
by (9.8k points)

    def film_durata(self, inf=0, sup=None):
        '''restituisce la lista delle istanze degli oggetti di tipo Film,
        dei film in cui l'attore self ha recitato e che durano almeno inf minuti e,
        se sup è specificato, massimo sup minuti.
        La lista deve essere ordinata per durata dei film in ordine crescente.
        In caso di parità per titolo crescente in ordine alfabetico.
        Se nel file json sono specificate più durate per lo stesso film, usate la durata minore.
        Se nei dati json la durata non è indicata ignorate quel film.
          NOTA: per estrarre la durata dalla proprieta' "RUNTIME" dei dati json che descrivono un film avete il permesso di usare la libreria re per le espressioni regolari.

Non hai sbagliato, si può usare

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ah ecco mi sembrava strano
l
leoli (2930 points)
0 5 19
by (2.9k points)
edited by

Per farlo devi usare il comando

re.findall('[0-9]{4}', la tua stringa) -> trova tutte le occorrenze di 4 cifre consecutive (utile per trovare gli anni di nascita ecc. ecc.)

re.findall('[0-9]{1,10}', la tua stringa) -> trova tutte le occorrenze da 1 a 10 cifre consecutive (utile per trovare la durata del film)

regex prende in input nelle sue funzioni una stringa che specifica che tipo di espressione stai cercando, per esempio:

'[0-9]{4}' significa : le parole formate da 4 caratteri contenuti nell'alfabeto [0,1,2,3,4,5,6,7,8,9] (scritto in forma abbreviata : [0-9])

Perchè usare regex? è potente e assolutamente versatile, imparare a usarlo potrà aiutarti in molte situazioni!

Perchè non usare Split? questo terzo Homework ti fornisce un esempio perfetto: i dati nella realtà sono sporchi! troverai le tue date di nascita degli attori messe in tutti i modi o addirittura completamente assenti, ti faccio un esempio:

21 July 2009, Los Angeles, California, USA -> qui puoi usare split(',') e poi cercare le 4 cifre

21 July 2009 a.d., Los Angeles, California, USA -> qui già non funziona più

21 July  USA -> qui peggio ancora

inoltre ogni volta che ti dovrai cercare qualcosa in una stringa dovrai creare una funzione apposita, regex fa tutto questo per te!

Se vuoi imparare a usare regex (non ci vuole molto) leggi le doc ufficiali!