QGISの別の列の文字列の一部に基づいて新しい列を作成する

Aug 24 2020

ゾーニング名("subzones"UV036、UMTs2など)の列があり、代わりに一般ゾーン(UV036の代わりにUV、UMTs2の代わりにUMT ...)を使用して新しい列を作成したいと思います。同じ数の文字または同じ構造)。

私はフィールド計算機でこれをやろうとしました:

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

(フィールド計算機でこれをどの列に配置するかも指定します)。

%可能なサブゾーンを考慮に入れるワイルドカードです(サブゾーンに数字または文字が含まれ、それらの数字が異なる場合がありますが、4を超えることはありません%%%%。したがって)。

残念ながら、それは機能しません。

回答

3 ahmadhanb Aug 24 2020 at 22:26

同じ列からテキストを抽出する場合は、ユースケースを使用する必要はありません。フィールド計算機で次の式を使用して、次のように新しい列の大文字を抽出できます。

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

出力は次のようになります。

この式'([A-Z]+)'は、文字列の最初の部分である大文字をキャプチャ'\\1'し、最初のグループを選択します。

この式'(.+)'は、文字列の残りの部分をキャプチャします。文字列の2番目の部分に別の列を入力する場合は、次の式を使用できます。

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

ただ、交換する\\1\\2第2のグループをキャプチャします。