正则-从数字字符串中匹配想要的数字

2019-07-06  本文已影响0人  蜡笔不好吃

背景

正则表达式主要应用在字符串的匹配搜索上,而且非常强大。这次遇到的问题就和正则有关

在写SQL的时候,有一列是投诉原因,多选项,不同原因会组合到一起,不同的数字代表不同的投诉类型,现在我想要判断指定的投诉原因是否在里面。
举个栗子

序号 投诉原因
1 1,3,5,7,9,10
2 2,24,25
3 24,25

现在我要判断投诉原因中有2或者3的都算是。

问题

开始的时候正则是

--- regexp_like 是 Presto的正则匹配函数
select 
  index, --序号
  if(regexp_like(aa.feedback_reason,'2|3'),'是','否') as complain_flag --判断
from  
  table_1 aa

但是结果显示
1 是
2 是
3 是

3为什么结果是“是”???

解决

因为正则写的是

pattern= '2|3'

问题出在这里,序号3的数据里面 str = '24,25' 是包含2的,正则这样写的话,只要出现2就判断为是。可是我们想要的是2而不是24,25。那就得改写正则表达式

pattern = '\b2\b|\b3\b'

看到这里或许你就明白了,\b是在加边界,告诉计算机,我需要的是2这个数字,而不是随便匹配到2就可以。(即24里面的2不是我想要,我要的是有边界的2)
所以解决这个问题的关键就是 单词边界 也就是\b

所以最终的SQL是

select 
  index, 
  if(regexp_like(aa.feedback_reason,'\b2\b|\b3\b'),'是','否') as complain_flag 
from  
  table_1 aa

正则表达式在线测试:http://tool.oschina.net/regex/
参考:https://zhidao.baidu.com/question/987099792816138779.html

上一篇下一篇

猜你喜欢

热点阅读