3

123A アメリカ、234B ブリタニアなどの名前から int と char の両方を抽出しようとしています。番号と添付の文字 (つまり 123A) のみが必要です。私は regexp_matches(name, '(\d+)(\D)') を使用していますが、結果は次のようになります。

{123,A}, {456,B}

連結を使用して、配列の最初の要素と2つの異なる関数を使用して2番目の要素を取得することを考えました (regexp_matches(name, '(\d+)(\D)' )) [1] || (regexp_matches(name, '(\d+)(\D)' )) [2]

しかし、それはエラーを生成します: ERROR: functions and operators can take at most one set argument

2 つの要素を 1 つの文字列として取得するにはどうすればよいですか?

4

2 に答える 2

1

探している 2 つのアイテムを別々のセットとして入手する必要はありません。1 つのセットとして入手してください。)(and の間\d+を削除すると\D、探している文字列全体を含むセットが返されます。

この結果 - regexp_matches('123A America, 234B Britania', '(\d+\D)' )

これは、最初の一致のみを検索します。一致するすべての部分文字列を取得するには、gフラグを使用します - regexp_matches('123A America, 234B Britania', '(\d+\D)', 'g')

于 2013-10-28T15:38:05.287 に答える
0

@Scott Sによる良い答えですが、1つのキャプチャグループ内で必要なものを達成できない場合の解決策は、関数を作成し、正規表現の結果を変数に割り当ててから使用することです。

CREATE OR REPLACE FUNCTION do_something(_input character varying)
  RETURNS character varying AS
$BODY$
DECLARE
    matches text[];
BEGIN
    matches := regexp_matches(_input, '^([0-9]{1,}_[^_]{1,})_[a-z]{1,}(.*)$','i');
    return substring(matches[1], 0, 24)||matches[2];
END
$BODY$
  LANGUAGE plpgsql;
于 2015-02-28T01:26:55.553 に答える