web-dev-qa-db-ja.com

Hive REGEXP_EXTRACT()関数を使用して、非英数字、または非数値文字を削除する方法

複数の非英数字または非数値文字を削除する方法、または文字列から数字のみを返す方法を見つけようとしています。私はもう試した:

SELECT
regexp_extract('X789', '[0-9]', 0)
FROM
table_name

ただし、「789」ではなく「7」を返します。

また、NOT MATCH構文^((?! regexp)。)* $を使用して、数字以外の文字を削除しようとしました。

SELECT
REGEXP_REPLACE('X789', '^((?![0-9]).)*$', '')
FROM
jav_test_ii

Regexp_extractは複数の一致を返すことができますか?私が本当にやろうとしているのは、数字または英数字のみが含まれるようにデータを消去することです。これは悪い文字の削除に役立つようですが、[0-9]のような文字の範囲ではありません。 regexp_replace(string、 '�'、 '')

編集:以下のクエリは「7789」を返すことができました。これはまさに私が探していたものです。

SELECT
regexp_replace("7X789", "[^0-9]+", "")
FROM
table_name
10
user1152532

こちらもご覧ください Hive regexp_extract weirdness

Regex_extractは、3番目のパラメーターで指定されたグループ番号のみを返すと思います。

_regex_extract_は1行でのみ機能し、その後終了するようです。

代替品については知りません。

英数字以外のデータでも機能する可能性がありますが、このようなものをフィードした場合

REGEXP_REPLACE(error_code, '[^a-zA-Z0-9]+', '')


また、抽出については、上記のリンクを参照してください。

regexp_extract('X789', '[0-9]+', 0)は複数の数字を表します。

または

regexp_extract('XYZ789', '[a-zA-Z]+', 0)複数のアルファ用。

21
user557597