Espressione regolare: inserire automaticamente un carattere speciale↵
Ho delle label composte da 4-5 parole e vorrei mandare a capo ogni 2 parole circa. Se uso lo spazio ovviamente mi impila le 4-5 parole e non è quello che vorrei ottenere. E' possibile inserire automaticamente un carattere speciale dopo ogni due parole? Utilizzerei poi quel carattere per mandare a capo il testo nel compositore di stampa di QGIS 2.18. Inserire il carattere speciale a mano è impensabile...sono più di 1000 feature..
CASE
WHEN length ("TRIM_STR_C" ) >34
THEN regexp_replace( "TRIM_STR_C" , '(\\S+\\s+\\S+\\s+\\S+)(\\s+)(.*)','\\1$\\3')
else regexp_replace( "TRIM_STR_C" , '(\\S+\\s+\\S+)(\\s+)(.*)','\\1$\\3')
END
Questa espressione condizionale controlla prima la lunghezza della stringa (label) e se >34 applica la prima regexp_replace altrimenti la seconda;
la regexp_replace:
(\\S+\\s+\\S+\\s+\\S+)(\\s+)(.*)
acchiappa il terzo spazio presente in tutta la frase e per sostituirgli un carattere spaciale: \\1$\\3
dove \\1
è la prima parte prima del terzo spazio mentre \\3
è la terza parte contando anche lo spazio;
(\\S+\\s+\\S+)(\\s+)(.*)
acchiappa il secondo spazio presente in tutta la frase e per sostituirgli un carattere spaciale: \\1$\\3
dove \\1
è la prima parte prima del terzo spazio mentre \\3
è la terza parte contando anche lo spazio;
thread ML Gfoss
Altra possibile soluzione, molto più elegante è la seguente (grazie Andrea Borruso):
^((\\S+\\s*?){3})(\\s+)(.*?)$
e per la sostituzione \\1#\\4
ovvero, il numero tra parentesi graffe indica la parola oltre la quale inserire il carattere speciale:
regexp_replace('Via Mario Miglioranza detto Pinto','^((\\S+\\s*?){3})(\\s+)(.*?)$','\\1#\\4') → Via Mario Miglioranza#detto Pinto
Funzioni e variabili utilizzate: