你的选择不止一个(逻辑 || sql)正则过滤数据

  最初研究的目的也是为了方便做报表,数据是最为重要的东西,但是当你返回数据的时候会有杂乱的字符存在其中,导致拿到了所有的数据还有你意想不到的数据(懂的都懂   - -).

方法一(逻辑过滤)

  字符过滤,我们可以使用正则去过滤掉不需要的字符,从而拿到想要的结果如下:

//因为是递归过滤,所以在大数据筛选的时候也会影响效率,递归毕竟也是循环
    public List<FinfModBean> cleanTextDate(FoodBean foodBean) {
        List<FinfModBean> fBeanList =new ArrayList<FinfModBean>();
        
        //结果集
        List<FinfModBean> finfModBeans = finfModMapper.cleanTextDate(null);
        if (finfModBeans.size()>0){
            //此处使用的是stream
            finfModBeans.stream()
                    .forEach(bean -> {
                        FinfModBean fBean =new FinfModBean();
           //---------------------------------------------------正则校验点开始-------------------------------------------------------------
                        //过滤字符表   字符表数量我只选了最基础的  比较特殊的字符这里面没,补不足的地方可以去度娘搜下
                        String regEx="[A-Za-z`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
                        //真正过滤的地方                                             空格就用trim()去除了一下            
                        String domeFind = bean.getFindName().replaceAll(regEx, "1").trim();
           //----------------------------------------------------正则校验点结束------------------------------------------------------------
                        fBean.setId(bean.getId());
                        fBean.setFindName(domeFind);
                        fBeanList.add(fBean);
                    });
        }

-------------方法分隔符---------------

 

方法二(sql过滤)

 

  有时候数据的清理在逻辑方面处理可能太麻烦,所以我们只好另辟蹊径,之前我经常用sql脚本的方式去执行数据清理替换,然后再返回成新的数据集合返回

  

#原数据
select find_name  from find_mod;

 

#将数据中的指定字符替换  单个字符替换
select regexp_replace(find_name, '7','') find_name from find_mod;

 

 

 此处我将字符为7的替换成了空字符

 

#数组集替换
#regexp_replace(1,2,3,4,5,6)  括号内的数字为填充位置      
#语法说明第二个字段替换集合:[x,x,x,x,x] 这个集合类似于字符表单,有需要替换或者验证的都可以放入其中,但是要注意格式
#语法说明:
1:字段 2:替换的字段 3:替换成什么 4:起始位置(默认从1开始) 5:替换的次数(0是无限次) 6:i不区分大小写 ,c区分大小写 select regexp_replace(find_name, '[A-Z]','9',1,0,'c') find_name from find_mod;

 

 

 开启大小写区分就可以辨认替换数据列中的字符

 

 

说明:

  正则表达式不仅仅有此功效,其中电话验证替换,身份证验证替换,等等,还有很多

 

Java正则表达式学习: 
因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索。 
 
\\ 反斜杠 
\t 间隔 ('\u0009') 
\n 换行 ('\u000A') 
\r 回车 ('\u000D') 
\d 数字 等价于[0-9] 
\D 非数字 等价于[^0-9] 
\s 空白符号 [\t\n\x0B\f\r] 
\S 非空白符号 [^\t\n\x0B\f\r] 
\w 单独字符 [a-zA-Z_0-9] 
\W 非单独字符 [^a-zA-Z_0-9] 
\f 换页符 
\e Escape 
\b 一个单词的边界 
\B 一个非单词的边界 
\G 前一个匹配的结束 
 
^为限制开头 
^java     条件限制为以Java为开头字符 
$为限制结尾 
java$     条件限制为以java为结尾字符 
. 条件限制除\n以外任意一个单独字符 
java..     条件限制为java后除换行外任意两个字符 
 
 
加入特定限制条件「[]」 
[a-z]     条件限制在小写a to z范围中一个字符 
[A-Z]     条件限制在大写A to Z范围中一个字符 
[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 
[0-9]     条件限制在小写0 to 9范围中一个字符 
[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 
[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集) 
 
[]中加入^后加再次限制条件「[^]」 
[^a-z]     条件限制在非小写a to z范围中一个字符 
[^A-Z]     条件限制在非大写A to Z范围中一个字符 
[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 
[^0-9]     条件限制在非小写0 to 9范围中一个字符 
[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 
[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集) 
 
在限制条件为特定字符出现0次以上时,可以使用「*」 
J*     0个以上J 
.*     0个以上任意字符 
J.*D     J与D之间0个以上任意字符 
 
在限制条件为特定字符出现1次以上时,可以使用「+」 
J+     1个以上J 
.+     1个以上任意字符 
J.+D     J与D之间1个以上任意字符 
 
在限制条件为特定字符出现有0或1次以上时,可以使用「?」 
JA?     J或者JA出现 
 
限制为连续出现指定次数字符「{a}」 
J{2}     JJ 
J{3}     JJJ 
文字a个以上,并且「{a,}」 
J{3,}     JJJ,JJJJ,JJJJJ,???(3次以上J并存) 
文字个以上,b个以下「{a,b}」 
J{3,5}     JJJ或JJJJ或JJJJJ 
两者取一「|」 
J|A     J或A 
Java|Hello     Java或Hello 

 

posted @ 2021-05-14 17:11  RM-RF?  阅读(206)  评论(0编辑  收藏  举报