REGEX Estrarre numeri da stringa

DRDLCN (8070 points)
3 67 104
asked Dec 10, 2018 in Info sul corso e sugli esami by DRDLCN (8,070 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?
871 views

2 Answers

_andrea_ (45670 points)
2 39 297
answered Dec 10, 2018 by _andrea_ (45,670 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)
2 39 297
commented Dec 10, 2018 by _andrea_ (45,670 points)
Puoi splittare alla virgola e prendere gli ultimi 4 caratteri
DRDLCN (8070 points)
3 67 104
commented Dec 10, 2018 by DRDLCN (8,070 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)
2 39 297
commented Dec 10, 2018 by _andrea_ (45,670 points)
Ah ero convinto si potesse. Allora forse ho sbagliato a usarlo...
v
val9 (9770 points)
0 28 53
commented Dec 10, 2018 by val9 (9,770 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)
2 39 297
commented Dec 10, 2018 by _andrea_ (45,670 points)
Ah ecco mi sembrava strano
l
leoli (2930 points)
0 4 19
answered Dec 10, 2018 by leoli (2,930 points)
edited Dec 10, 2018 by leoli

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!