通过正则表达式获取字符串中的省市区

//[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市) 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

//^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

//[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

上代码

package com.example.helloworld.controller;

import java.util.HashMap;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class AddressUtil {

private AddressUtil() {

}

/**

* 从地址串中解析提取出省市区等信息

*

* @param address 地址信息

* @return 解析后的地址Map

*/

private static Map addressResolution(String address) {

//1.地址的正则表达式

//[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市) 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

//^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

//[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛 越前面的优先级越高,会取优先级高的第一个匹配到的进行截取

String regex = "(?[^省]+省|.+自治区|[^澳门]+澳门|北京|重庆|上海|天津|台湾|[^香港]+香港|[^市]+市)?(?[^自治州]+自治州|[^特别行政区]+特别行政区|[^市]+市|.*?地区|.*?行政单位|.+盟|市辖区|[^县]+县)(?[^县]+县|[^市]+市|[^镇]+镇|[^区]+区|[^乡]+乡|.+场|.+旗|.+海域|.+岛)?(?

.*)";

//2、创建匹配规则

Matcher m = Pattern.compile(regex).matcher(address);

String province;

String city;

String county;

String detailAddress;

Map map = new HashMap<>(16);

while (m.find()) {

//加入省

province = m.group("province");

map.put("province", province == null ? "" : province.trim());

//加入市

city = m.group("city");

map.put("city", city == null ? "" : city.trim());

//加入区

county = m.group("county");

map.put("county", county == null ? "" : county.trim());

//详细地址

detailAddress = m.group("address");

map.put("address", detailAddress == null ? "" : detailAddress.trim());

}

return map;

}

/**

* 根据地址获取解析后的地址对象

*

* @param address 解析前地址Str

* @return 解析后地址对象

*/

public static Map resolveAddress(String address) {

Map addressMap = addressResolution(address);

Map map = new HashMap<>();

map.put("receiver_area", addressMap.get("province") + " " + addressMap.get("city") + " " + addressMap.get("county"));

map.put("receiver_address", addressMap.get("address"));

return map;

}

public static void main(String[] args) {

System.out.println(resolveAddress("内蒙古自治区呼伦贝尔市海拉尔区仁德里街汽车公司综合楼27号"));

}

}

结果

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: