Re: [Python] Ricerca e sostituzione con regex

2019-06-18 Per discussione Daniele Zambelli
Il giorno mar 18 giu 2019 alle ore 12:23 Marco Beri
 ha scritto:
>
> On Tue, Jun 18, 2019 at 11:57 AM Daniele Zambelli 
>  wrote:
>>
>>
>> ##result = re.sub(r'\\\$', r'd_o_ll_a_ro', string, flags=re.S)
>> result = re.sub(r'(?>   [...]

Ok, lasciato un solo carattere e funziona in tutti i casi in cui
funzionava prima.

Ma non riesco a capire perché se nell'espressione c'è la stringa "\$"
la seguente istruzione non riconosce l'intera espressione:


...
>>> print(translate(r'espressione con dollaro:~$3^2+4^2=\$5^2$'))
espressione con dollaro:~\(3^2+4^2=\$5^2\)
"""
result = re.sub(r'(?https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-18 Per discussione Marco Beri
On Tue, Jun 18, 2019 at 11:57 AM Daniele Zambelli <
daniele.zambe...@gmail.com> wrote:

>
> ##result = re.sub(r'\\\$', r'd_o_ll_a_ro', string, flags=re.S)
> result = re.sub(r'(? r'\[\1\]',
> string.rstrip(), flags=re.S)
> result = re.sub(r'(? r'\(\1\)',
> result, flags=re.S)
> ##result = re.sub(r'd_o_ll_a_ro', r'\\\$', string)
> return result
>


Già la parte in giallo è sbagliata. Le parentesi quadre elencano un gruppo
di caratteri che vanno ricercati (oppure non cercati se il primo carattere
è ^ ).

Non puoi pensare di mettere due caratteri uguali e pensare che la regex non
te li consideri solo quando doppi.

Purtroppo le regex sono bastarde :-(


-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
http://beri.it/articoli/ - Qualche articolo
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Ricerca e sostituzione con regex

2019-06-18 Per discussione Daniele Zambelli
Il giorno lun 17 giu 2019 alle ore 23:16 Marco Beri
 ha scritto:
> [...]
> Positive and Negative Lookbehind
>
> Lookbehind has the same effect, but works backwards. It tells the regex 
> engine to temporarily step backwards in the string, to check if the text 
> inside the lookbehind can be matched there. (? preceded by an "a", using negative lookbehind. It doesn't match cab, but 
> matches the b (and only the b) in bed or debt. (?<=a)b(positive lookbehind) 
> matches the b (and only the b) in cab, but does not match bed or debt.

Grazie per la grande disponibilità!

Ora i dollari esterni alle espressioni vengono riconosciuti regolarmente,
Ma se il dollaro è all'interno di un'espressione la sostituzione non
viene fatta.

Per comodità copioincollo l'intero programmino con i test compresi:

8<---
import re

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\)
>>> print(translate(r'dollaro: \$ espressione senza dollaro:~$3^2+4^2=5^2$'))
dollaro: \$ espressione senza dollaro:~\(3^2+4^2=5^2\)
>>> print(translate(r'''dollaro: \$, espressione senza \$:
... $$a^2=b^2+c^2$$'''))
dollaro: \$, espressione senza \$:
\[a^2=b^2+c^2\]
>>> print(translate(r'''dollaro: \$, espressione con \$:
... $$a^2=\$b^2+c^2$$'''))
dollaro: \$, espressione con \$:
\[a^2=\$b^2+c^2\]
>>> print(translate(r'dollaro: \$ espressione con dollaro:~$3^2+4^2=\$5^2$'))
dollaro: \$ espressione con dollaro:~\(3^2+4^2=\$5^2\)
"""
##result = re.sub(r'\\\$', r'd_o_ll_a_ro', string, flags=re.S)
result = re.sub(r'(?8

Penso che l'errore sia nell'espressione all'interno della quadra:

[^(?https://lists.python.it/mailman/listinfo/python