Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Marco Beri
On Sun, 16 Jun 2019, 19:32 Daniele Zambelli, 
wrote:

> 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...
>


Alla peggio puoi iterare fino a che non sostituisci nulla.

Vai sul sicuro così 😉

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Pietro Brunetti
Devi vedere come fare le regex no gready... Di default cercano la stringa
massima che corrisponde alla definizione.
(Scusate il quoting, ma non ho voglia di cancellare tutto lo stack dal
cell...)

Il dom 16 giu 2019, 19:54 Daniele Zambelli  ha
scritto:

> Il giorno dom 16 giu 2019 alle ore 19:32 Daniele Zambelli
>  ha scritto:
> > [...]
>
> L'avrei risolta così:
>
> result = re.sub(r'\$\$(.[^\$\$]*)\$\$',
> r'\[\1\]',
> string.rstrip(), flags=re.S)
> result = re.sub(r'\$(.[^\$]*)\$',
> r'\(\1\)',
> result, flags=re.S)
>
> Non so se la soluzione è sensata, cosa dite?
>
> --
>
> Daniele
>
> www.fugamatematica.blogspot.com
>
> giusto!
> nel verso
> forse è perché non guardiamo le cose
> Quando non ci capiamo,
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Daniele Zambelli
Il giorno dom 16 giu 2019 alle ore 19:32 Daniele Zambelli
 ha scritto:
> [...]

L'avrei risolta così:

result = re.sub(r'\$\$(.[^\$\$]*)\$\$',
r'\[\1\]',
string.rstrip(), flags=re.S)
result = re.sub(r'\$(.[^\$]*)\$',
r'\(\1\)',
result, flags=re.S)

Non so se la soluzione è sensata, cosa dite?

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Daniele Zambelli
Il giorno dom 16 giu 2019 alle ore 18:31 Lorenzo Buonanno
 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:
""  >  "\[\]"
"$$"  >  "\(\)"
>>> print(translate(r''))
\[\]
>>> print(translate(r'$$'))
\(\)
>>> 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,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Leo Lo Tito
>
>
> Aperta, aperta, chiusa, chiusa.


Beh si hai ragione 😅
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Marco Beri
On Sun, 16 Jun 2019, 18:26 Leo Lo Tito,  wrote:

> Ciao, si potresti usare le espressioni regolari, ma sarà il caldo a farmi
> ragionare così... utilizzerei due "funzioncine" con lo split e un ciclo
> pari/dispari dove pari, inserisci l'apertura e dispari la chiusura degli
> elementi.
>


Aperta, aperta, chiusa, chiusa.

In questo caso il pari/dispari non funzionerebbe.

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Lorenzo Buonanno
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)

On Sun, Jun 16, 2019 at 3:50 PM Daniele Zambelli 
wrote:

> Il giorno dom 16 giu 2019 alle ore 14:06 Giovanni Vittorio Spina
>  ha scritto:
> >
> > Ponendo ad esempio
> > a = " pippo $$"
> >
> > Si può avere il testo corretto con il seguente comando
> > b = a.replace(“$$<“,  "\\[<“).replace(“>$$”, “>\\]").replace(“$<”,
> “\\(<”).replace(“>$”, “>\\)”)
>
> Grazie per le indicazioni, però non mi sono spiegato bene. Con
> "" intendevo una qualunque formula matematica LaTeX:
>
> Il testo da modificare potrebbe essere:
>
> \begin{definizione}
> $$
> m \times n = \begin{cases}
>  0 & se \quad n = 0\\
>  m & se \quad n = 1\\
>  \underbrace{m + m + \dots + m}_{\text{n volte}} & \mbox{ negli altri casi}
> \end{cases}$$
> \end{definizione}
>
> \begin{itemize*}
>  \item \emph{Commutativa}: $a \cdot b = b \cdot a$
>  \item \emph{Associativa}: $(a \cdot b) \cdot c = a \cdot (b \cdot c)$
>  \item \emph{Elemento neutro} $a \cdot 1 = 1 \cdot a = a$
> \end{itemize*}
>
> \begin{definizione}
> Dati due numeri naturali~$m$ e~$n$, con~$n \neq 0$, la divisione associa
> un terzo numero naturale~$q$, se esiste, che moltiplicato per ad~$n$ dà
> come prodotto~$m$.
> Si scrive~$n : m = q$.
> \end{definizione}
>
> e dovrebbe diventare:
>
> \begin{definizione}
> \[
> m \times n = \begin{cases}
>  0 & se \quad n = 0\\
>  m & se \quad n = 1\\
>  \underbrace{m + m + \dots + m}_{\text{n volte}} & \mbox{ negli altri casi}
> \end{cases}\]
> \end{definizione}
>
> \begin{itemize*}
>  \item \emph{Commutativa}: \(a \cdot b = b \cdot a\)
>  \item \emph{Associativa}: \((a \cdot b) \cdot c = a \cdot (b \cdot c)\)
>  \item \emph{Elemento neutro} \(a \cdot 1 = 1 \cdot a = a\)
> \end{itemize*}
>
> \begin{definizione}
> Dati due numeri naturali~\(m\) e~\(n\), con~\(n \neq 0\), la divisione
> associa
> un terzo numero naturale~\(q\), se esiste, che moltiplicato per ad~\(n\) dà
> come prodotto~\(m\).
> Si scrive~\(n : m = q\).
> \end{definizione}
>
> Quindi dovrei identificare una coppia di coppie di dollari e
> trasformare la prima con la stringa: "\[" e la seconda con la stringa
> "\]":
>
> $$a^2=b^2+c^2$$   --->   \[a^2=b^2+c^2\]
> e
> $5+7=12$   --->   \(5+7=12\)
>
> È per questo che pensavo fosse più un lavoro da espressioni regolari
> che da semplice sostituzione.
>
> Grazie.
>
> --
>
> Daniele
>
> www.fugamatematica.blogspot.com
>
> giusto!
> nel verso
> forse è perché non guardiamo le cose
> Quando non ci capiamo,
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Leo Lo Tito
Ciao, si potresti usare le espressioni regolari, ma sarà il caldo a farmi
ragionare così... utilizzerei due "funzioncine" con lo split e un ciclo
pari/dispari dove pari, inserisci l'apertura e dispari la chiusura degli
elementi.

> leo
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Daniele Zambelli
Il giorno dom 16 giu 2019 alle ore 14:06 Giovanni Vittorio Spina
 ha scritto:
>
> Ponendo ad esempio
> a = " pippo $$"
>
> Si può avere il testo corretto con il seguente comando
> b = a.replace(“$$<“,  "\\[<“).replace(“>$$”, “>\\]").replace(“$<”, 
> “\\(<”).replace(“>$”, “>\\)”)

Grazie per le indicazioni, però non mi sono spiegato bene. Con
"" intendevo una qualunque formula matematica LaTeX:

Il testo da modificare potrebbe essere:

\begin{definizione}
$$
m \times n = \begin{cases}
 0 & se \quad n = 0\\
 m & se \quad n = 1\\
 \underbrace{m + m + \dots + m}_{\text{n volte}} & \mbox{ negli altri casi}
\end{cases}$$
\end{definizione}

\begin{itemize*}
 \item \emph{Commutativa}: $a \cdot b = b \cdot a$
 \item \emph{Associativa}: $(a \cdot b) \cdot c = a \cdot (b \cdot c)$
 \item \emph{Elemento neutro} $a \cdot 1 = 1 \cdot a = a$
\end{itemize*}

\begin{definizione}
Dati due numeri naturali~$m$ e~$n$, con~$n \neq 0$, la divisione associa
un terzo numero naturale~$q$, se esiste, che moltiplicato per ad~$n$ dà
come prodotto~$m$.
Si scrive~$n : m = q$.
\end{definizione}

e dovrebbe diventare:

\begin{definizione}
\[
m \times n = \begin{cases}
 0 & se \quad n = 0\\
 m & se \quad n = 1\\
 \underbrace{m + m + \dots + m}_{\text{n volte}} & \mbox{ negli altri casi}
\end{cases}\]
\end{definizione}

\begin{itemize*}
 \item \emph{Commutativa}: \(a \cdot b = b \cdot a\)
 \item \emph{Associativa}: \((a \cdot b) \cdot c = a \cdot (b \cdot c)\)
 \item \emph{Elemento neutro} \(a \cdot 1 = 1 \cdot a = a\)
\end{itemize*}

\begin{definizione}
Dati due numeri naturali~\(m\) e~\(n\), con~\(n \neq 0\), la divisione associa
un terzo numero naturale~\(q\), se esiste, che moltiplicato per ad~\(n\) dà
come prodotto~\(m\).
Si scrive~\(n : m = q\).
\end{definizione}

Quindi dovrei identificare una coppia di coppie di dollari e
trasformare la prima con la stringa: "\[" e la seconda con la stringa
"\]":

$$a^2=b^2+c^2$$   --->   \[a^2=b^2+c^2\]
e
$5+7=12$   --->   \(5+7=12\)

È per questo che pensavo fosse più un lavoro da espressioni regolari
che da semplice sostituzione.

Grazie.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Giovanni Vittorio Spina
Ponendo ad esempio 
a = " pippo $$"

Si può avere il testo corretto con il seguente comando
b = a.replace(“$$<“,  "\\[<“).replace(“>$$”, “>\\]").replace(“$<”, 
“\\(<”).replace(“>$”, “>\\)”)

Se a è il testo completo con la vecchia sintassi, b è il testo con la sintassi 
sostituita.
L’ordine del replace è fondamentale per evitare che venga sostituito il testo 
$$< con $\(< saltando il primo dollaro.
Le doppie \\ servono per identificare la \ e non un carattere speciale, es \n 
come accapo.
Puoi salvare  il risultato su un file:

Handle = open(“nomefile.ext”, “wb”)
Handle.write(b)
Handle.close()

E hai il nuovo testo pronto.
Ciao
V


> Il giorno 16 giu 2019, alle ore 11:20, Daniele Zambelli 
>  ha scritto:
> 
> ""  >  "\[\]"
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Ricerca e sostituzione con regex

2019-06-16 Per discussione Daniele Zambelli
Salve a tutti.

Sto curando la pubblicazione del testo libero di matematica per le
superiori Matematica Dolce (bitbucket.org/zambu/matematicadolce).

I sorgenti sono in LaTeX.

Un gruppo dell'università di Torino (http://www.integr-abile.unito.it)
ha scritto un pacchetto per LaTeX per rendere i testi di matematica
più facilmente fruibili dai ciechi
(http://www.integr-abile.unito.it/axessibility/).

Questo pacchetto prevede che le formule siano indicate dai simboli:
"\(", "\)", "\[" e "\]", ma in LaTeX c'è anche la possibilità, di
usare i vecchi simboli: "$" e "$$".

Molti dei sorgenti del libro usano i vecchi simboli (per altro ancora
molto utilizzati) ora io vorrei scrivere un programmino che mi passi
tutti i file sorgenti .tex e operi le seguenti sostituzioni:

""  >  "\[\]"

"$$"  >  "\(\)"

Osservazione:  può anche essere scritta su più righe.

Così, a occhio direi che lo strumento adatto da usare sono le
espressioni regolari strumento che uso raramente e su cui sono molto
ignorante.

Qualcuno può aiutarmi a scrivere la funzione che dato un testo produca
un testo con le precedenti sostituzioni?

Grazie per l'attenzione e per qualunque indicazione vogliate darmi.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python