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