public static void main(String[] args) { //String address = "浙江省温州市苍南县金乡镇苍南县 金乡阳美小区4栋"; String address = "河南省周口市扶沟县搬口街fewfwf"; String regex="((?<province>[^省]+^自治区|.*?自治区|.*?省|.*?行政区|.*?市)|上海|北京|天津|重庆)(?<city>上海城区|北京城区|天津城区|重庆城区|重庆郊县|[^市]+自治州|.*?自治县|.*?地区|.*?行政单位|.+盟|市辖区|香港岛|九龙半岛|新界|澳门半岛|海南州|屯昌县|临高县|定安县|澄迈县|神农架林区|路环岛|非堂区|氹仔|离岛|.*?市)(?<county>[^县]+县|.*?区|.*?市|.*?旗|.*?镇|.*?路氹城)"; regex = regex+"?(?<town>[^乡镇]+乡镇|.*?街道|.*?社区|.*?办事处乡|.*?办事处|.*?管理处|.*?管委会|.*?苏木|.*?中心|.*?场|.*?区|.+镇|.+乡|.*?团|.*?业局|.*?工园|.*?业园|.*?管理局|.*?群岛|.*?委员会|.*?中心|.*?指挥部|.*?公司|.*?办公室|.*?江镜华侨|.*?梅西水库|.*?曹妃甸新城|.*?察北|.*?工业基地|.*?桐湖|.*?中法武汉生态示范城|.*?钢都花园|.*?太平川|.*?东宝新村|.*?科教新城|.*?滨江新城|.*?农业高新园|.*?建筑材料厂|.*?农科所|.*?阿荣旗林业和草原局|.*?门源监狱|.*?福海监狱|.*?新疆农业科学院玛纳斯县试验站)?(?<village>.*)"; 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("provinceStr", province==null?null:province.trim()); city=m.group("city"); row.put("cityStr", city==null?null:city.trim()); county=m.group("county"); if(county==null){ county=row.get("cityStr"); } row.put("countyStr", county==null?null:county.trim()); town=m.group("town"); row.put("townStr", town == null ? null : town.trim()); village=m.group("village"); row.put("detail", village==null?"":village.trim()); } if(row.get("townStr")==null){ System.out.println("test"); } System.out.println(row); }