《平凡的世界》评分不错,《巴黎圣母院》改变成的电影不错,还有<<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》
猜你喜欢
- 3月前周公解梦解析梦见蛇的寓意
- 3月前梦中见斗殴流血的心理解析
- 3月前梦中命案现场的心理解析
- 3月前梦中遇袭却幸免于难
- 3月前梦见老虎象征哪位仙家
- 3月前梦见大量水的深层含义解析
- 3月前梦见逝者预示什么心理含义
- 3月前周公梦册查码解梦指南
- 3月前梦中发断泪难止
- 3月前女性梦中杀蛇的心理学解析
网友评论
- 搜索
- 最新文章
- 热门文章
