java 正则表达式提取需要的文本

们试着从地址中提取省市信息,示例文本如:福建省厦门市杏林区,我们在IDE中键入如下代码进行提取:

String address = "福建省厦门市杏林区";

Pattern ptn = Pattern.compile("([\\u4e00-\\u9fa5]+省)?([\\u4e00-\\u9fa5]+市)(.*)");

Matcher matcher = ptn.matcher(address);

if (matcher.matches()) {

String province = matcher.group(1);

String city = matcher.group(2);

System.out.println("省:" + province);

System.out.println("市:" + city);

}

执行代码后控制台输出如下结果:

省:福建省

市:厦门市

这里需要注意的是中文的正则范围为:[u4e00-u9fa5],并且正则提取内容以()分组,即([\\u4e00-\\u9fa5]+省)为提取省份的组,([\\u4e00-\\u9fa5]+市)为提取城市的组,提取数据时下标是从组所在的位置开始,即从1开始而不是从0开始,这点需要注意。

用下标来提取数据有时候显得不那么好看,如果要修改提取规则还得从头数有几个组,挺费劲的也容易出错,那么我们改一下代码:

String address = "福建省厦门市杏林区";

Pattern ptn = Pattern.compile("(?<province>[\\u4e00-\\u9fa5]+省)?(?<city>[\\u4e00-\\u9fa5]+市)(.*)");

Matcher matcher = ptn.matcher(address);

if (matcher.matches()) {

String province = matcher.group("province");

String city = matcher.group("city");

System.out.println("省:" + province);

System.out.println("市:" + city);

}

我们发现得到的效果是一样的,我们只是在提取数据的分组内给他取一个别名,如?<province>取数时从下标换成别名,这是个很好的方法因为这样看起来会更加的友好维护起来也会方便很多。

package com.founder.mrp.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 与String相关的工具方法集
 * @author Jimmy
 *
 */
public class StringUtil {

    public static String getMatcher(String regex, String source) {
        String result = "";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(source);
        while (matcher.find()) {
            result = matcher.group(1);
        }
        return result;
    }

    public static void main(String[] args) {
        String url = "http://172.12.1.123/test.txt";
        String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})";
//        String regex = "(\\d{1,3}\\.){1,3}(\\d{1,3})";
        System.out.println(getMatcher(regex,url));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值