Re: [Python] (senza oggetto)

2020-05-03 Per discussione Gollum1
Il giorno gio 30 apr 2020 alle ore 15:35 Marco Beri
 ha scritto:
>
> On Thu, Apr 30, 2020 at 3:21 PM Alessandro T.  wrote:
>>
>> Il 30/04/20 14:11, Marco Beri ha scritto:
>>
>> > La soluzione per te sono le regular expression:
>> >
>> >
>> > >>> testo = """lunghezza legno: 1000 cm
>> > ... peso del tronco: 34 kg
>> > ... tempo di lavorazione: 11 ore 57 minuti"""
>> > >>> testo
>> > 'lunghezza legno: 1000 cm\npeso del tronco: 34 kg\ntempo di
>> > lavorazione: 11 ore 57 minuti'
>> > >>> import re
>> > >>> re.findall(r"\s(\d+)\b\s*(\w+)", testo)
>> > [('1000', 'cm'), ('34', 'kg'), ('11', 'ore'), ('57', 'minuti')]
>> >
>> >
>> >
>> > Potrei consigliarti un buon testo sulle regex ma sarei in conflitto di
>> > interessi (e poi trovi comunque una marea di tutorial su web) :-D
>> >
>> > Ciao.
>> > Marco.
>> >
>>
>> Elegante come soluzione però incorretta perché il "tempo di lavorazione"
>> viene spezzato in "11 ore" e "57 min". Forse uno split() sulla singola
>> riga è più indicato.
>
>
> Pronti! :-)
>
> >>> import re
> >>> testo = """lunghezza legno: 1000 cm
> ... peso del tronco: 34 kg
> ... tempo di lavorazione: 11 ore 57 minuti"""
> >>> re.findall(r"\s(\d+)\s*(\w+)(\s\d+\s\w+)?", testo)
> [('1000', 'cm', ''), ('34', 'kg', ''), ('11', 'ore', ' 57 minuti')]
>
>

Grande Marco,

ormai ci metti le regexp ovunque... non per niente ci hai scritto  un
bellissimo libro... :.P

questo tuo modo, avrebbe il vantaggio che si trova nelle varie tuple i
valori e le grandezze...
però non sarebbe possibile fare le tuple con i campi necessari? per
esempio, eliminare il campo vuoto nelle prime due, e separare
uletriormente la terza in '57' , "minuti"?


Byez
-- 
Gollum1 - http://www.gollumone.it
Tesoro, dov'é il mio teoro...
___
Python mailing list
[email protected]
https://lists.python.it/mailman/listinfo/python


Re: [Python] (senza oggetto)

2020-05-03 Per discussione Marco Beri
On Sun, May 3, 2020 at 3:40 PM Gollum1  wrote:

> Il giorno gio 30 apr 2020 alle ore 15:35 Marco Beri
>  ha scritto:
>
> > >>> import re
> > >>> testo = """lunghezza legno: 1000 cm
> > ... peso del tronco: 34 kg
> > ... tempo di lavorazione: 11 ore 57 minuti"""
> > >>> re.findall(r"\s(\d+)\s*(\w+)(\s\d+\s\w+)?", testo)
> > [('1000', 'cm', ''), ('34', 'kg', ''), ('11', 'ore', ' 57 minuti')]
>
> Grande Marco,
> ormai ci metti le regexp ovunque... non per niente ci hai scritto  un
> bellissimo libro... :.P
>
> questo tuo modo, avrebbe il vantaggio che si trova nelle varie tuple i
> valori e le grandezze...
> però non sarebbe possibile fare le tuple con i campi necessari? per
> esempio, eliminare il campo vuoto nelle prime due, e separare
> uletriormente la terza in '57' , "minuti"?
>

No, evitare i gruppi vuoti che io sappia non si può (però puoi ignorarli
facilmente da Python.
Questa divide in due gruppi la terza:

\s(\d+)\s*(\w+)(?:\s(\d+)\s(\w+))?


import re
testo = """lunghezza legno: 1000 cm
peso del tronco: 34 kg
tempo di lavorazione: 11 ore 57 minuti"""
print(re.findall(r"\s(\d+)\s*(\w+)(?:\s(\d+)\s(\w+))?", testo))


[('1000', 'cm', '', ''), ('34', 'kg', '', ''), ('11', 'ore', '57',
'minuti')]




Ciao.
Marco.
___
Python mailing list
[email protected]
https://lists.python.it/mailman/listinfo/python