有时候,我们开发的系统上线使用,往往是需要数据导入的,但是旧的数据很多是文本的形式,
我们此时就可以利用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版权协议,转载请附上原文出处链接和本声明。