[Python] Ricerca e sostituzione con regex

Alessandro Dentella sandro a e-den.it
Gio 20 Giu 2019 00:43:26 CEST


On Wed, Jun 19, 2019 at 10:24:47PM +0200, Daniele Zambelli wrote:
> Il giorno mar 18 giu 2019 alle ore 16:46 Lorenzo Buonanno
> <buonanno.lorenzo a gmail.com> ha scritto:
> >
> > Perché contiene un carattere che hai imposto di escludere in [^\$], c'è una ragione per cui invece di escludere caratteri dentro la stringa non puoi usare espressioni non greedy come suggerito più volte in questo thread?
>
> La ragione è che non avevo capito. Combinando la tua dritta con quella
> di Marco ho ottenuto questo:
>
> ...
>     result = re.sub(r"(?<!\\)\$\$(.*?)(?<!\\)\$\$", r"\[\1\]",
>                     input_text, flags=re.S)
>     result = re.sub(r"(?<!\\)\$(.*?)(?<!\\)\$", r"\(\1\)",
>                     result, flags=re.S)
> ...
>

posso solo suggerire che per aumentare la leggibilità puoi usare
re.VERBOSE (*) che ti permette di scrivere il pattern su più righe con i
commenti:

   pattern = re.compile('''
      (?<!\\)  # negative lookbehind: matches if not preceded by \
      \$\$     #  $$formula$$
      (.*?)    #  any text but not greedy!
      (?<!\\)  #
      \$\$     # fine formula
   ''', flags=re.VERBOSE|re.S)


sandro


(*) https://docs.python.org/3.7/library/re.html#re.VERBOSE


Maggiori informazioni sulla lista Python