我一直在试图弄清楚如何删除多个非字母数字或非数字字符,或者只返回数字字符一个字符串。我试过了:如何使用Hive删除非字母数字或非数字字符REGEXP_EXTRACT()函数
SELECT
regexp_extract('X789', '[0-9]', 0)
FROM
table_name
但它返回'7',而不是'789'。
我也试图删除非数字字符使用不符合语法^((?!正则表达式)。)* $:
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
感谢您的提示,这适用于我的例子。如果你有'7X789',它似乎不工作,因为它只返回'7'。你知道在这种情况下你的解决方案是否可以扩展到返回7789? – user1152532
@ user1152532 - 尝试替换方法。例如,'regexp_replace(“7(-X78T9)RMM”,“[^ 0-9] +”,“”)'应该返回'7789'。正则表达式包含一个量化的(+)负([^])类,意味着不是0-9之间的数字。它将全局替换所有非数字字符。这是根据文档。我无法测试它。 – sln
完美的工作......谢谢@sln。看起来我可以在REGEX上使用一个复习 - 你能推荐任何好的网站/资源来加快速度吗? REGEXP Basics的谷歌搜索结果似乎都指向了像90年代那样的网站。 – user1152532