我一直试图弄清楚如何删除多个非字母数字或非数字字符,或只返回字符串中的数字字符。我试过了:
SELECT
regexp_extract('X789', '[0-9]', 0)
FROM
table_name
但它返回'7',而不是'789'。
我还尝试使用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
答案 0 :(得分:19)
另见hive regexp_extract weirdness
我认为regex_extract只会返回第3个参数中指定的组号。
regex_extract
似乎只能在一条线上工作然后退出。
我不知道替换对手。
它可能适用于非孤儿数据,但如果你喂它像这样
REGEXP_REPLACE(error_code, '[^a-zA-Z0-9]+', '')
此外,对于提取,请参阅上面的链接,您可以将其更改为
regexp_extract('X789', '[0-9]+', 0)
表示多个号码。
或
多个alpha的 regexp_extract('XYZ789', '[a-zA-Z]+', 0)
。