Il giorno lun 17 giu 2019 alle ore 23:16 Marco Beri
<marcob...@gmail.com> 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. (?<!a)b matches a "b" that is not 
> 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:
"$$<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\)
>>> 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'(?<!\\)\$\$(.[^\$\$]*)(?<!\\)\$\$',
                    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


TEST = True
#TEST = False

if __name__ == '__main__':
    if TEST:
        import doctest
        OPTFLG = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
        doctest.testmod(optionflags=OPTFLG, verbose=True)
    else:
        main()
--------------------------------------------------->8

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

[^(?<!\\)\$]

Ma non capisco come sistemarlo.

-- 

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

Rispondere a