Creazione di una nuova colonna basata su parti di stringhe in un'altra colonna in QGIS

Aug 24 2020

Ho una colonna con nomi di zonizzazione (con "subzones"come UV036, UMTs2 ecc.) E vorrei creare una nuova colonna con la zona generale (UV invece di UV036, UMT invece di UMTs2 ... come vedi non è sempre il stesso numero di lettere o stessa struttura).

Ho provato a farlo nel calcolatore di campo:

CASE 
    WHEN "c_zonage_b" LIKE 'UH%%%%' THEN 'UH'
    WHEN "c_zonage_b" LIKE 'UE%%%%' THEN 'UE'
    WHEN "c_zonage_b" LIKE 'N%%%%'  THEN 'N'
    ELSE ''
END

(Specifico anche in quale colonna voglio che sia presente nel calcolatore del campo).

%sono caratteri jolly per tenere conto di ogni possibile sottozona (a volte la sottozona include numeri o lettere e il loro numero varia, ma non è mai più di quattro da cui il %%%%).

Purtroppo non funziona.

Risposte

3 ahmadhanb Aug 24 2020 at 22:26

Non è necessario utilizzare il caso se si desidera estrarre il testo dalla stessa colonna. È possibile utilizzare la seguente espressione nel Calcolatore di campo per estrarre le lettere maiuscole nella nuova colonna come segue:

regexp_replace( "Name" ,'([A-Z]+)(.+)','\\1')

L'output sarà così:

Questa espressione '([A-Z]+)'cattura le lettere maiuscole, che è la prima parte della stringa, e '\\1'serve per selezionare il primo gruppo.

Questa espressione '(.+)'cattura il resto della stringa. Se vuoi popolare un'altra colonna per la seconda parte della stringa, puoi usare la seguente espressione:

regexp_replace( "Name" ,'([A-Z]+)(.+)','\\2')

Basta sostituire \\1con \\2per acquisire il secondo gruppo.