[Python] regex per modificare una stringa

Daniele Zambelli daniele.zambelli a gmail.com
Dom 11 Nov 2012 18:23:09 CET


Salve!

Sto lavorando ad un progetto: scrivere un programma che traduca un file odt
(open/libre office) in sphinx. I documenti odt sono salvati in file xml
zippati.

Il lavoro sarebbe a buon punto (quasi pubblicabile) se non fosse che spesso
i file odt prodotti con Libreoffice sono estremamente "sporchi".

Pensavo quindi di ripulirli prima di darli in pasto a dot2sphinx.

Ad esempio io vorrei che la stringa:

<ns4:p ns4:style-name="P11">

Nuove<ns4:span ns4:style-name="T28"> </ns4:span>

figure<ns4:span ns4:style-name="T28">  </ns4:span>

lavorative<ns4:span ns4:style-name="T28">   </ns4:span>

nella<ns4:span ns4:style-name="T28">    </ns4:span>

società<ns4:span ns4:style-name="T28">     </ns4:span>

postfordista

</ns4:p>

diventi:

<ns4:p ns4:style-name="P11">

Nuove figure  lavorative   nella    società     postfordista

</ns4:p>


Pensavo che le regex potessero aiutarmi. Ma quello che sono riuscito ad
ottenere à:


Nuove     postfordista


Leggendo il manuale di MB penso di aver capito dove sta il problema, ma non
sono riuscito a trovare rimedio.


Il programma di prova che ho scritto è:



 from __future__ import division, print_function


import re


def cleantest(string):

    """Clean test.

>>> print(cleantest(u'''<ns4:p ns4:style-name="P11">

... Nuove<ns4:span ns4:style-name="T28"> </ns4:span>figure<ns4:span
ns4:style-name="T28">  </ns4:span>lavorative<ns4:span ns4:style-name="T28">
  </ns4:span>nella<ns4:span ns4:style-name="T28">
 </ns4:span>società<ns4:span ns4:style-name="T28">
</ns4:span>postfordista

... </ns4:p>'''))

<ns4:p ns4:style-name="P11">

Nuove figure  lavorative   nella    società     postfordista

</ns4:p>

>>>

"""

    SPAN = "ns4:span"

    c = re.compile("\<{0} .+\>(?P<spaces>\s*)\<\/{0}\>".format(SPAN))

    string = c.sub(r"\g<spaces>", string)

    return string


import doctest

doctest.testmod()



Siccome sono molto ignorante in regex, chiedo:

- sono lo strumento giusto per il mio problema?

- se sì, come devo modificare la funzione perché funzioni?

- è invece meglio che mi smazzoli il file xml?

Grazie per la pazienza.


 --

Daniele

www.fugamatematica.blogspot.com

    giusto!
    nel verso
    forse è perché non guardiamo le cose
    Quando non ci capiamo,
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20121111/7c43c101/attachment.html>


Maggiori informazioni sulla lista Python