正则表达式获取省市区地址信息
/**
* 解析地址
* @param address
* @return
*/
public static List<Map<String,String>> addressResolution(String address){
/*
* java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern
* 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher
* 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
* 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行 * 字符串的匹配工作。
*/
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)?(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
//(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)?表示一个模块 最后的问号表示可以为空
Matcher m=Pattern.compile(regex).matcher(address);
String province=null,city=null,county=null,town=null,village=null;
List<Map<String,String>> table=new ArrayList<Map<String,String>>();
Map<String,String> row=null;
while(m.find()){
row=new LinkedHashMap<String,String>();
province=m.group("province");
row.put("province", province==null?"":province.trim());
city=m.group("city");
row.put("city", city==null?"":city.trim());
county=m.group("county");
row.put("county", county==null?"":county.trim());
town=m.group("town");
row.put("town", town==null?"":town.trim());
village=m.group("village");
row.put("village", village==null?"":village.trim());
table.add(row);
}
return table;
}
public static void main(String[] args) {
List<Map<String,String>> table = addressResolution("新疆维吾尔自治区昌吉回族自治州xxxxxx");
System.out.println(table);
System.out.println(table.get(0).get("province"));
System.out.println(table.get(0).get("city"));
System.out.println(table.get(0).get("county"));
System.out.println(table.get(0).get("town"));
System.out.println(table.get(0).get("village"));
}
以上对整个地址进行解析
以下只获取到市级
/**
* 根据地址获取 xx省xx市
* @param address 地址
* @return
*/
private String addressResolution(String address){
if (StringUtils.isBlank(address)){
return "";
}
String result = "";
String regex = "(?<city>[^市]+自治州|.*?市|.*?地区|.*?行政单位|.+盟|市辖区|.*?县)";
Matcher m = Pattern.compile(regex).matcher(address);
while(m.find()){
result = m.group("city");
if (StringUtils.isNotBlank(result)){
break;
}
}
return result;
}