利用Java正则表达式来匹配提取信息

有时候,我们开发的系统上线使用,往往是需要数据导入的,但是旧的数据很多是文本的形式,

我们此时就可以利用Java的正则表达式将文本中规则的信息匹配并提取出来,然后按照设计的方式生成对应的数据。

合同签订付定金2万元,20-07-15前付3万元(不含定金)供方安排发货,20-12-01前付7万元,21-07-01前付6万元.[申请发货:王五])

例如上面的文本,我想提取出定金信息和每次付款时间及金额,怎么做?看下面的代码

实例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Description:测试正则表达式抽取信息
 *
 * @Author dusuanyun
 * @Date 2021-05-26
 */
public class DemoTest {
    // 要匹配的内容,此处为了main方法中取方便,故设为静态。
    static final String info = "合同签订付定金2万元,20-07-15前付3万元(不含定金)供方安排发货,20-12-01前付7万元,21-07-01前付6万元.[申请发货:王五])";
    // 定金的匹配模式,例如:付定金2万元
    static final String djPattern = "付定金(\\d+)万元"; 
    // 计划的匹配模式:例如:20-07-15前付3万元
    static final String jhPattern = "((\\d{2,4}-\\d{1,2}-\\d{1,2})前付(\\d+)万元)"; 

    // 静态的形式,先编译好,避免每次使用都再编译一次(无谓的编译会造成性能问题,应尽量减少),
    static final Pattern djp = Pattern.compile(djPattern);
    static final Pattern jhp = Pattern.compile(jhPattern);

    public static void main(String[] args) {

        // 得到定金与付款计划的匹配器
        Matcher djm = djp.matcher(info);
        Matcher jhm = jhp.matcher(info);
        // 匹配定金,因为只有一个,也可能没有,匹配到就打印信息(此处嵌入自己的业务代码即可),
        if (djm.find()) {
            System.out.println("djm.group(0):" + djm.group(0));
            System.out.println("djm.group(1):" + djm.group(1));
        }
        // 匹配付款计划,因为可能有多个,循环匹配,直到匹配结束,嵌入自己的业务代码即可
        while (jhm.find()){
            // 匹配到数量
            int count = jhm.groupCount();
            System.out.println("匹配到组的个数:" + count);
            System.out.println("jhm.group(0):" + jhm.group(0));
            System.out.println("jhm.group(1):" + jhm.group(1));
            System.out.println("jhm.group(2):" + jhm.group(2));
            System.out.println("jhm.group(3):" + jhm.group(3));
            
        }
    }
}

执行输出:

     djm.group(0):付定金2万元
     djm.group(1):2
     匹配到组的个数:3
     jhm.group(0):20-07-15前付3万元
     jhm.group(1):20-07-15前付3万元
     jhm.group(2):20-07-15
     jhm.group(3):3
     匹配到组的个数:3
     jhm.group(0):20-12-01前付7万元
     jhm.group(1):20-12-01前付7万元
     jhm.group(2):20-12-01
     jhm.group(3):7
     匹配到组的个数:3
     jhm.group(0):21-07-01前付6万元
     jhm.group(1):21-07-01前付6万元
     jhm.group(2):21-07-01
     jhm.group(3):6

看到输出的信息,相信你已经知道怎么得到想要的数据了。
     


版权声明:本文为dusuanyun原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。