[MontelLUG] Libreoffice ed espressioni regolari

Odeeno odeeno a yahoo.it
Ven 4 Ago 2017 11:32:45 CEST


Il 03/08/2017 23:45, Syslac via montellug ha scritto:
> 2017-08-03 16:27 GMT+02:00 Odeeno via montellug <montellug a montellug.it>:
>> per questo caso ho provato ad usare questo ma non funziona:
>> cerca: (?<=^Cod. [0-9]+)$
>> sostituisci: " - "
>>
>> Ma così non trova nulla: neanche usando al posto \n o \p al posto di $
>> Preciso che se faccio cerca: ^Cod. [0-9]+ trova tutti gli inizi di
>> paragrafo interessati.

Non ho mai capito nulla delle espressioni regolari... ora comincio ad
aver un barlume.

> 
> Ok, allora un paio di cose che potrebbero essere il tuo problema, ma
> non è detto che lo siano:

Sapevo che qualcuno mi avrebbe dato una mano ;)


> * Scrivi che ^Cod. [0-9]+ funziona, ma non ci scrivi se ^Cod. [0-9]+$
> funziona (cioè uguale alla prima che hai postato, ma senza il
> lookbehind); se non funziona (ed immagino di no), la differenza

E invece funziona: ma non funziona se lo metto nel lookbehind

> potrebbe stare nel fatto che con la prima, tu stai implicitamente
> (perché la tua ricerca finisce lì) accettando del whitespace tra il numero ed il
> fine riga, mentre con la seconda (e con la tua regexp originale)
> pretendi che il fine riga sia subito a ridosso del numero;
> diventerebbe quindi una cosa tipo (?<=^Cod. [0-9]+\s*)$

I whitespaces li avevo già eliminati tutti.

> * Ho visto una cosa ambigua nella documentazione di Libreoffice per
> cui pare che il $ non sia il fine riga ma il fine "paragrafo"; non

Si: è una cosa unica di LibreOffice (e prima Oo). Penso che servisse a
loro per determinare le formattazioni di paragrafo. Non è un fine linea
\n. Se cerchi però $ (da solo) ti trova le interruzioni di paragrafo. Se
sostituisci con \n ti inserisce non un finelinea, ma un fine paragrafo!!!
In ogni caso: la documentazione di LibreOffice, fa pietà.
Se a qualcuno dovesse interessare ho trovato questo:
https://wiki.openoffice.org/wiki/Documentation/How_Tos/Regular_Expressions_in_Writer
C'è anche un link ad un forum dove avevano risolto con una macro il
problema dei paragrafi, ma non funziona più.

> sapendo cosa intendono per paragrafo, io proverei a vedere cosa
> succede con un delimitatore più certo, ad esempio \b (per il fine
> parola); questo non è quello che cerchi perché te lo cambierebbe anche
> in mezzo alla riga, però se la regexp pari pari, ma con il \b
> funziona, allora sai per certo che il tuo problema è solo con il $.

Il problema c'è anche con \b: nel lookbehind questo non funziona
(?<=^Cod. [0-9]+)\b

> * Non so se sia una buona idea legarsi anche alĺ'inizio riga via ^ nel
> lookbehind, io proverei senza; al massimo hai qualche falso positivo
> se hai righe che sfortunatamente finiscono con quel testo, ma se
> intanto ti funziona poi puoi lavorarci; quindi come terzo tentativo
> toglierei il ^.

Forse non è questo il problema.

> * Nel dubbio, io proverei a scriverla anche proprio senza il
> lookbehind, che se ci pensi bene non ti serve; puoi usare un capture
> group standard, ed usare il risultato della cattura nella
> sostituzione; però dubito sia questo il motivo per cui non ti va.

Ho letto: utile.

> 
> Bye,
> 
> Syslac

Alla fine ho scelto una strada diversa: elaborare in prima istanza il
testo txt con Kate (non con LibreOffice) e poi applicare le
formattazioni con LibreOffice.

Cerca: (Cod. [0-9]+)\n(.*)
Sostituisci: \1 - \2

Grazie Syslac

> _______________________________________________
> montellug mailing list
> montellug a montellug.it
> http://mail.montellug.it/mailman/listinfo/montellug
> 


Maggiori informazioni sulla lista montellug