[Python] Ricerca e sostituzione con regex
Daniele Zambelli
daniele.zambelli a gmail.com
Dom 16 Giu 2019 19:32:18 CEST
Il giorno dom 16 giu 2019 alle ore 18:31 Lorenzo Buonanno
<buonanno.lorenzo a gmail.com> ha scritto:
>
> Prova una cosa come
>
> import re
> first_substitution = re.sub(r"\$\$(.*?)\$\$", r"\[\1\]", input_text, flags=re.S)
> final_text = re.sub(r"\$(.*?)\$", r"\(\1\)", first_substitution, flags=re.S)
Intanto grazie per le vostre indicazioni.
La funzione che ho realizzato è:
def translate(string):
"""translate:
"$$<formula>$$" ----> "\[<formula>\]"
"$<formula>$" ----> "\(<formula>\)"
>>> print(translate(r'$$<formula>$$'))
\[<formula>\]
>>> print(translate(r'$<formula>$'))
\(<formula>\)
>>> print(translate(r'$$a^2=b^2+c^2$$'))
\[a^2=b^2+c^2\]
>>> print(translate(r'$\frac{3+x}{x}$'))
\(\frac{3+x}{x}\)
>>> print(translate(r'''$$
... a^2=b^2+c^2
... $$'''))
\[
a^2=b^2+c^2
\]
>>> print(translate(r'primo:~$2$; secondo: $5$; terzo:~$7$'))
primo:~\(2\); secondo:\(5\); terzo:~\(7\)
"""
result = re.sub(r'\$\$(.*)\$\$',
r'\[\1\]',
string.rstrip(), flags=re.S)
result = re.sub(r'\$(.*)\$',
r'\(\1\)',
result, flags=re.S)
return result
In un primo tempo non c'era il flag S e gli ultimi due test fallivano.
Aggiunto il flag l'ultimo test continua a fallire:
Failed example:
print(translate(r'primo:~$2$; secondo: $5$; terzo:~$7$'))
Expected:
primo:~\(2\); secondo:\(5\); terzo:~\(7\)
Got:
primo:~\(2$; secondo: $5$; terzo:~$7\)
Becca il primo e l'ultimo dollaro ma salta quelli intermedi. So che
Marco lo aveva spiegato benissimo, ma non ho sotto mano il suo libro e
non mi ricordo come si risolve...
--
Daniele
www.fugamatematica.blogspot.com
giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
Maggiori informazioni sulla lista
Python