《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。
如何使用regexp_extract®exp_replace函数将以上文本中所有书籍名称都提取出来?
select substr( regexp_replace( regexp_extract( regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》') ,'(.*》)',1) ,'.*?(《[^》|^《]+》)',',$1') ,2) as books ;
代码解析:
step1:两个regexp_replace()依次将<<规整为《,将>>规整为》;
step2:regexp_extract正则提取满足pattern='.*》'时的值,此操作的主要目的为剔除最后一个书名号》后的文本内容
select regexp_extract( regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》') ,'(.*》)',1) ;
此时提取出来的结果为:
《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有《1984》
step3:regexp_replace将书名号前边的内容替换成,
#此处的是指第一个小括号中的匹配结果 select regexp_replace( '《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有《1984》' ,'.*?(《[^》|^《]+》)',',') ;
此时提取出来的结果为:
,《平凡的世界》,《巴黎圣母院》,《1984》
此处需要注意的是:
*1).正则表达式中用了非贪婪匹配.*?,如果使用贪婪匹配.*,最终返回的结果将会是
,《1984》
*2)若省去step2的操作,提取出来的结果不满足条件
select regexp_replace( regexp_replace(regexp_replace('《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<1984>>也蛮好看。','<<','《'),'>>','》') ,'.*?(《[^》|^《]+》)',',$1') ;
此时提取出来的结果为:
,《平凡的世界》,《巴黎圣母院》,《1984》也蛮好看。
step4:substr截取除第一个逗号之外的其余内容
select substr(',《平凡的世界》,《巴黎圣母院》,《1984》',2) ;
最终提取出来的结果为:
《平凡的世界》,《巴黎圣母院》,《1984》
猜你喜欢
- 16天前梦见掉头发预示什么心理暗示
- 16天前梦见打架的心理学解析与深层含义
- 16天前梦中见斗殴流血的心理解析
- 16天前梦见掉牙的心理暗示与解析
- 16天前梦见打死蛇头预示什么征兆
- 16天前梦中家蛇遭击毙的寓意解析
- 13天前女性梦境解析:细蛇的象征意义
- 13天前梦见别人给钱的心理暗示解析
- 13天前梦见被老鼠咬手的寓意解析
- 13天前孕妇梦见棺材与逝者的心理解析
网友评论
- 搜索
- 最新文章
- 热门文章