zoukankan      html  css  js  c++  java
  • java 中的字符串处理--正则表达式

    最近在做一些支付报文处理工作,需要从各种各样的报文中提取需要的信息比如(金额,订单号。。。),每个渠道报文各式各样,想要写一个通用的提取逻辑,于是就回顾java正则表达式的用法。当然我们可以自己写一些算法,去提取这些字段,但对于简单的解析来说,亲自手写算法有点杀鸡用牛刀的感觉,而且正则表达式完全可以满足大部分的字符提取需求。好了闲话不多说,先列出正则表达式的常用语法:

    • :表示下一个字符为特殊含义的字符例如:d匹配数字
    • ^:表示匹配字符开始的位置例如:^#.*:匹配以#开头的所有字符
    • $:表示匹配字符结束位置例如:.*元$:匹配以元为结尾的字符
    • .:表示匹配所有字符
    • *:表示出现次数为0,或大于0次
    • +:表示出现次数为1或大于1次
    • ?:表示匹配0次或1次
    • {n}:标示与字符刚好匹配n次
    • {n,m}:标示至少匹配n次,最多匹配m次
    • [xyz]:字符集,匹配字符集中任意字符,例如:[abc] 匹配plan中的a
    • [^xyz]:反向字符集,相当与非运算,表示不在字符集中的字符
    • (pattern):子表达式,在java中我们自左向右取group: matcher.group(0);

    下面列出一些常用的特殊字符及其含义:

    • d:匹配数字,等效于[0-9]
    • D:匹配非数字,等效于[^0-9]
    • :匹配换行符
    • :匹配回车符
    • s:匹配空格或者换行符或者换页符,等效于[f v]
    • S:匹配任何非空字符
    • w:匹配任何字类字符,等效于[a-zA-Z0-9]
    • W:匹配任何非字类字符

    为了加深理解与运用,下面列出几个应用场景:

    取出下面字符串中的金额:

    #支出合计:33笔, 共10.00元
    String temp = "#支出合计:33笔, 共10.00元";
            Pattern p = Pattern.compile("(\d+\.\d+)");
            Matcher matcher = p.matcher(temp);
            if(matcher.find()){
                System.out.println(matcher.group(0));
                System.out.println(matcher.group(1));
            }

    输出:10.00

    发现成功的将报文中的金额识别出来,因此我们只需要将不同结构的报文中含有金额部分输入,就可以方便的输出金额了,简单的万金油....

  • 相关阅读:
    char *p = "abcdefg"; p[0] = p[1]出错
    最近在 OS-10.9下配置opencv, cgal, latex, qt, pillow
    Python文件操作
    Python字典和集合
    Python目录操作
    python处理中文(待补充)
    混合高斯模型
    随机生成某些稀疏矩阵
    matlab注释
    C#中int,string,char[],char的转换(待续)
  • 原文地址:https://www.cnblogs.com/foreveravalon/p/7520445.html
Copyright © 2011-2022 走看看