使用regexp\u extract不会得到预期的结果-hive

ifsvaxew  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(436)

我想用 REGEXP_EXTRACT 函数从列中获取所需的字符串。列中的数据格式如下: words\more_words 我需要提取后的字符串部分 \ . 我试过这样做:
SELECT REGEXP_EXTRACT('words\more_words','(.)(\+)(.)',3) -> returns nothing SELECT REGEXP_EXTRACT('words\more_words','.*(\\+)(.*)',2) -> returns nothing SELECT REGEXP_EXTRACT('words\more_words','\w+(\+)(\w+)',2)-> returns nothing SELECT REGEXP_EXTRACT('words\more_words','\\+(\w+)',1) -> returns nothing 我已经验证了上面所有的正则表达式都匹配 words\more_wordsregex101.com (除了最后一个与 \more_words ). 但是,我完全不明白为什么Hive不能达到预期的效果。
我不确定我是否做错了什么。所以,为了验证,我做了以下工作: SELECT REGEXP_EXTRACT('words\more_words','.*\\.*',0) -> returns 'wordsmore_words' 不知道为什么 \ 已从结果中删除。从技术上讲,正则表达式应该匹配整个字符串,结果应该是整个字符串,对吗?
我如何提取后的字符串部分 \ ? 任何帮助都将不胜感激。谢谢您!

hiz5n14c

hiz5n14c1#

单个文本反斜杠定义为 '\\' . 也就是说,如果字符串包含 \ ,您应该在字符串文本中使用两个反斜杠, '\\' .
在正则表达式中,可以使用双文本反斜杠来匹配文本反斜杠。一种弦图案 \\ 应写为 '\\\\' 为了匹配单个文字backsalsh。
使用

SELECT REGEXP_EXTRACT('words\\more_words','.*\\\\+(.*)',1)

请注意 'words\\more_words' 是定义 words\more_words 文字字符串。
图案细节 .* -除换行符以外的任何0+字符,尽可能多 \\\\+ -1个或多个文本 \ 字符 (.*) -捕获组#1:除换行符以外的任何0+个字符,尽可能多(在最后一个字符的帮助下返回) 1 对…的争论 REGEXP_EXTRACT 函数)。

相关问题