web-dev-qa-db-fra.com

Comment faire pour supprimer des caractères non alphanumériques ou non numériques avec la fonction Hive REGEXP_EXTRACT ()

J'ai essayé de comprendre comment supprimer plusieurs caractères non alphanumériques ou non numériques, ou renvoyer uniquement les caractères numériques d'une chaîne. J'ai essayé:

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

Mais il renvoie "7", pas "789".

J'ai également essayé de supprimer des caractères non numériques en utilisant la syntaxe NOT MATCH ^ ((?! Regexp).) * $:

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

Regexp_extract peut-il renvoyer plusieurs correspondances? Ce que j'essaie vraiment de faire, c'est de nettoyer mes données pour ne contenir que des chiffres ou des caractères alphanumériques. Cela semble aider à supprimer les mauvais caractères, mais ce n'est pas une plage de caractères comme [0-9]. regexp_replace (chaîne, '�', '')

EDIT: La requête ci-dessous a pu retourner "7789", ce qui est exactement ce que je cherchais.

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

Voir aussi ceci Hive regexp_extract weirdness

Je pense que regex_extract ne renverra que le numéro de groupe indiqué dans le 3ème paramètre.

regex_extract Semble fonctionner uniquement sur une ligne, puis quittez.

Je ne connais pas l'homologue de remplacement.

Cela peut fonctionner sur des données non alphanumiques, mais si vous les alimentez quelque chose comme ça

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


De plus, pour l'extrait, voir le lien ci-dessus et vous pouvez le changer en

regexp_extract('X789', '[0-9]+', 0) pour plusieurs nombres.

ou

regexp_extract('XYZ789', '[a-zA-Z]+', 0) pour plusieurs alpha.

21
user557597