我想用 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_words
在 regex101.com
(除了最后一个与 \more_words
). 但是,我完全不明白为什么Hive不能达到预期的效果。
我不确定我是否做错了什么。所以,为了验证,我做了以下工作: SELECT REGEXP_EXTRACT('words\more_words','.*\\.*',0) -> returns 'wordsmore_words'
不知道为什么 \
已从结果中删除。从技术上讲,正则表达式应该匹配整个字符串,结果应该是整个字符串,对吗?
我如何提取后的字符串部分 \
? 任何帮助都将不胜感激。谢谢您!
1条答案
按热度按时间hiz5n14c1#
单个文本反斜杠定义为
'\\'
. 也就是说,如果字符串包含\
,您应该在字符串文本中使用两个反斜杠,'\\'
.在正则表达式中,可以使用双文本反斜杠来匹配文本反斜杠。一种弦图案
\\
应写为'\\\\'
为了匹配单个文字backsalsh。使用
请注意
'words\\more_words'
是定义words\more_words
文字字符串。图案细节
.*
-除换行符以外的任何0+字符,尽可能多\\\\+
-1个或多个文本\
字符(.*)
-捕获组#1:除换行符以外的任何0+个字符,尽可能多(在最后一个字符的帮助下返回)1
对…的争论REGEXP_EXTRACT
函数)。