文本地址智能識別組件(一)

前言

最近工作中遇到一個需求,各快遞公司的官網在線寄件中都有地址識別的組件,輸入姓名,電話,地址識別省市區加詳細地址的方式,網上收集的解決方案是通過正則表達式匹配出省市區關鍵字,但是這種方式對於特殊的地址不夠靈活,且兼容性不高.現在需要研發一個高可用的識別接口,該如何做到?

方案

首先百度找了一下靈感,網上現有的方式是通過正則表達式匹配省市區關鍵字,如下:

    /**
     * 解析地址
     * @param address
     * @return
     */
    public static List<Map<String,String>> addressResolution(String address){
        String regex="((?<province>[^省]+省|.+自治區)|上海|北京|天津|重慶)(?<city>[^市]+市|.+自治州)(?<county>[^縣]+縣|.+區|.+鎮|.+局)?(?<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("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;
    }

這種方式及其不靈活,且多次測試之後會出現很多特殊地址,不規範地址產生的bug,經過改良之後可以強行匹配完整地址

	public static Map<String, String> addressResolution(String address) {
	    
		String regex = "(?<province>[^省]+^自治區|.*?自治區|.*?省|.*?行政區|.*?市)(?<city>上海城區|北京城區|天津城區|重慶城區|重慶郊縣|[^市]+自治州|.*?地區|.*?行政單位|.+盟|市轄區|香港島|九龍|新界|澳門半島|離島|.*?市|.*?縣)";
		String countyRegex = "(?<county>121團炮臺鎮|井陘縣|正定縣|行唐縣|靈壽縣|高邑縣|深澤縣|贊皇縣|無極縣|平山縣|元氏縣|趙縣|辛集市|晉州市|新樂市|灤縣|灤南縣|樂亭縣|遷西縣|玉田縣|遵化市|遷安市|青龍滿族自治縣|昌黎縣|盧龍縣|臨漳縣|成安縣|大名縣|涉縣|磁縣|邱縣|雞澤縣|廣平縣|館陶縣|魏縣|曲周縣|武安市|邢臺縣|臨城縣|內丘縣|柏鄉縣|隆堯縣|任縣|南和縣|寧晉縣|鉅鹿縣|新河縣|廣宗縣|平鄉縣|威縣|清河縣|臨西縣|南宮市|沙河市|淶水縣|阜平縣|定興縣|唐縣|高陽縣|容城縣|淶源縣|望都縣|安新縣|易縣|曲陽縣|蠡縣|順平縣|博野縣|雄縣|涿州市|定州市|安國市|高碑店市|張北縣|康保縣|沽源縣|尚義縣|蔚縣|陽原縣|懷安縣|懷來縣|涿鹿縣|赤城縣|承德縣|興隆縣|灤平縣|隆化縣|豐寧滿族自治縣|寬城滿族自治縣|圍場滿族蒙古族自治縣|平泉市|滄縣|青縣|東光縣|海興縣|鹽山縣|肅寧縣|南皮縣|吳橋縣|獻縣|孟村回族自治縣|泊頭市|任丘市|黃驊市|河間市|固安縣|永清縣|香河縣|大城縣|文安縣|大廠回族自治縣|霸州市|三河市|棗強縣|武邑縣|武強縣|饒陽縣|安平縣|故城縣|景縣|阜城縣|深州市|清徐縣|陽曲縣|婁煩縣|古交市|陽高縣|天鎮縣|廣靈縣|靈丘縣|渾源縣|左雲縣|大同縣|平定縣|盂縣|長治縣|襄垣縣|屯留縣|平順縣|黎城縣|壺關縣|長子縣|武鄉縣|沁縣|沁源縣|潞城市|沁水縣|陽城縣|陵川縣|澤州縣|高平市|山陰縣|應縣|右玉縣|懷仁縣|榆社縣|左權縣|和順縣|昔陽縣|壽陽縣|太谷縣|祁縣|平遙縣|靈石縣|介休市|臨猗縣|萬榮縣|聞喜縣|稷山縣|新絳縣|絳縣|垣曲縣|夏縣|平陸縣|芮城縣|永濟市|河津市|定襄縣|五臺縣|代縣|繁峙縣|寧武縣|靜樂縣|神池縣|五寨縣|岢嵐縣|河曲縣|保德縣|偏關縣|原平市|曲沃縣|翼城縣|襄汾縣|洪洞縣|古縣|安澤縣|浮山縣|吉縣|鄉寧縣|大寧縣|隰縣|永和縣|蒲縣|汾西縣|侯馬市|霍州市|文水縣|交城縣|興縣|臨縣|柳林縣|石樓縣|嵐縣|方山縣|中陽縣|交口縣|孝義市|汾陽市|土默特左旗|托克托縣|和林格爾縣|清水河縣|武川縣|土默特右旗|固陽縣|達爾罕茂明安聯合旗|阿魯科爾沁旗|巴林左旗|巴林右旗|林西縣|克什克騰旗|翁牛特旗|喀喇沁旗|寧城縣|敖漢旗|科爾沁左翼中旗|科爾沁左翼後旗|開魯縣|庫倫旗|奈曼旗|扎魯特旗|霍林郭勒市|達拉特旗|準格爾旗|鄂托克前旗|鄂托克旗|杭錦旗|烏審旗|伊金霍洛旗|阿榮旗|莫力達瓦達斡爾族自治旗|鄂倫春自治旗|鄂溫克族自治旗|陳巴爾虎旗|新巴爾虎左旗|新巴爾虎右旗|滿洲裏市|牙克石市|扎蘭屯市|額爾古納市|根河市|五原縣|磴口縣|烏拉特前旗|烏拉特中旗|烏拉特後旗|杭錦後旗|卓資縣|化德縣|商都縣|興和縣|涼城縣|察哈爾右翼前旗|察哈爾右翼中旗|察哈爾右翼後旗|四子王旗|豐鎮市|烏蘭浩特市|阿爾山市|科爾沁右翼前旗|科爾沁右翼中旗|扎賚特旗|突泉縣|二連浩特市|錫林浩特市|阿巴嘎旗|蘇尼特左旗|蘇尼特右旗|東烏珠穆沁旗|西烏珠穆沁旗|太僕寺旗|鑲黃旗|正鑲白旗|正藍旗|多倫縣|阿拉善左旗|阿拉善右旗|額濟納旗|康平縣|法庫縣|新民市|長海縣|瓦房店市|莊河市|臺安縣|岫巖滿族自治縣|海城市|撫順縣|新賓滿族自治縣|清原滿族自治縣|本溪滿族自治縣|桓仁滿族自治縣|寬甸滿族自治縣|東港市|鳳城市|黑山縣|義縣|凌海市|北鎮市|蓋州市|大石橋市|阜新蒙古族自治縣|彰武縣|遼陽縣|燈塔市|盤山縣|鐵嶺縣|西豐縣|昌圖縣|調兵山市|開原市|朝陽縣|建平縣|喀喇沁左翼蒙古族自治縣|北票市|凌源市|綏中縣|建昌縣|興城市|農安縣|榆樹市|德惠市|永吉縣|蛟河市|樺甸市|舒蘭市|磐石市|梨樹縣|伊通滿族自治縣|公主嶺市|雙遼市|東豐縣|東遼縣|通化縣|輝南縣|柳河縣|梅河口市|集安市|撫松縣|靖宇縣|長白朝鮮族自治縣|臨江市|前郭爾羅斯蒙古族自治縣|長嶺縣|乾安縣|扶余市|鎮賚縣|通榆縣|洮南市|大安市|延吉市|圖們市|敦化市|琿春市|龍井市|和龍市|汪清縣|安圖縣|依蘭縣|方正縣|賓縣|巴彥縣|木蘭縣|通河縣|延壽縣|尚志市|五常市|龍江縣|依安縣|泰來縣|甘南縣|富裕縣|克山縣|克東縣|拜泉縣|訥河市|雞東縣|虎林市|密山市|蘿北縣|綏濱縣|集賢縣|友誼縣|寶清縣|饒河縣|肇州縣|肇源縣|林甸縣|杜爾伯特蒙古族自治縣|嘉蔭縣|鐵力市|樺南縣|樺川縣|湯原縣|同江市|富錦市|撫遠市|勃利縣|林口縣|綏芬河市|海林市|寧安市|穆棱市|東寧市|嫩江縣|遜克縣|孫吳縣|北安市|五大連池市|望奎縣|蘭西縣|青岡縣|慶安縣|明水縣|綏棱縣|安達市|肇東市|海倫市|呼瑪縣|塔河縣|漠河縣|江陰市|宜興市|豐縣|沛縣|睢寧縣|新沂市|邳州市|溧陽市|常熟市|張家港市|崑山市|太倉市|海安縣|如東縣|啓東市|如皋市|海門市|東海縣|灌雲縣|灌南縣|漣水縣|盱眙縣|金湖縣|響水縣|濱海縣|阜寧縣|射陽縣|建湖縣|東臺市|寶應縣|儀徵市|高郵市|丹陽市|揚中市|句容市|興化市|靖江市|泰興市|沭陽縣|泗陽縣|泗洪縣|桐廬縣|淳安縣|建德市|象山縣|寧海縣|餘姚市|慈溪市|永嘉縣|平陽縣|蒼南縣|文成縣|泰順縣|瑞安市|樂清市|嘉善縣|海鹽縣|海寧市|平湖市|桐鄉市|德清縣|長興縣|安吉縣|新昌縣|諸暨市|嵊州市|武義縣|浦江縣|磐安縣|蘭溪市|義烏市|東陽市|永康市|常山縣|開化縣|龍游縣|江山市|岱山縣|嵊泗縣|三門縣|天台縣|仙居縣|溫嶺市|臨海市|玉環市|青田縣|縉雲縣|遂昌縣|松陽縣|雲和縣|慶元縣|景寧畲族自治縣|龍泉市|長豐縣|肥東縣|肥西縣|廬江縣|巢湖市|蕪湖縣|繁昌縣|南陵縣|無爲縣|懷遠縣|五河縣|固鎮縣|鳳臺縣|壽縣|當塗縣|含山縣|和縣|濉溪縣|樅陽縣|懷寧縣|潛山縣|太湖縣|宿松縣|望江縣|嶽西縣|桐城市|歙縣|休寧縣|黟縣|祁門縣|來安縣|全椒縣|定遠縣|鳳陽縣|天長市|明光市|臨泉縣|太和縣|阜南縣|潁上縣|界首市|碭山縣|蕭縣|靈璧縣|泗縣|霍邱縣|舒城縣|金寨縣|霍山縣|渦陽縣|蒙城縣|利辛縣|東至縣|石臺縣|青陽縣|郎溪縣|廣德縣|涇縣|績溪縣|旌德縣|寧國市|閩侯縣|連江縣|羅源縣|閩清縣|永泰縣|平潭縣|福清市|仙遊縣|明溪縣|清流縣|寧化縣|大田縣|尤溪縣|沙縣|將樂縣|泰寧縣|建寧縣|永安市|惠安縣|安溪縣|永春縣|德化縣|金門縣|石獅市|晉江市|南安市|雲霄縣|漳浦縣|詔安縣|長泰縣|東山縣|南靖縣|平和縣|華安縣|龍海市|順昌縣|浦城縣|光澤縣|松溪縣|政和縣|邵武市|武夷山市|建甌市|長汀縣|上杭縣|武平縣|連城縣|漳平市|霞浦縣|古田縣|屏南縣|壽寧縣|周寧縣|柘榮縣|福安市|福鼎市|南昌縣|安義縣|進賢縣|浮樑縣|樂平市|蓮花縣|上栗縣|蘆溪縣|武寧縣|修水縣|永修縣|德安縣|都昌縣|湖口縣|彭澤縣|瑞昌市|共青城市|廬山市|分宜縣|餘江縣|貴溪市|信豐縣|大餘縣|上猶縣|崇義縣|安遠縣|龍南縣|定南縣|全南縣|寧都縣|于都縣|興國縣|會昌縣|尋烏縣|石城縣|瑞金市|吉安縣|吉水縣|峽江縣|新幹縣|永豐縣|泰和縣|遂川縣|萬安縣|安福縣|永新縣|井岡山市|奉新縣|萬載縣|上高縣|宜豐縣|靖安縣|銅鼓縣|豐城市|樟樹市|高安市|南城縣|黎川縣|南豐縣|崇仁縣|樂安縣|宜黃縣|金溪縣|資溪縣|廣昌縣|玉山縣|鉛山縣|橫峯縣|弋陽縣|餘干縣|鄱陽縣|萬年縣|婺源縣|德興市|平陰縣|濟陽縣|商河縣|膠州市|平度市|萊西市|桓臺縣|高青縣|沂源縣|滕州市|利津縣|廣饒縣|長島縣|龍口市|萊陽市|萊州市|蓬萊市|招遠市|棲霞市|海陽市|臨朐縣|昌樂縣|青州市|諸城市|壽光市|安丘市|高密市|昌邑市|微山縣|魚臺縣|金鄉縣|嘉祥縣|汶上縣|泗水縣|梁山縣|曲阜市|鄒城市|寧陽縣|東平縣|新泰市|肥城市|榮成市|乳山市|五蓮縣|莒縣|沂南縣|郯城縣|沂水縣|蘭陵縣|費縣|平邑縣|莒南縣|蒙陰縣|臨沭縣|寧津縣|慶雲縣|臨邑縣|齊河縣|平原縣|夏津縣|武城縣|樂陵市|禹城市|陽穀縣|莘縣|茌平縣|東阿縣|冠縣|高唐縣|臨清市|惠民縣|陽信縣|無棣縣|博興縣|鄒平縣|曹縣|單縣|成武縣|鉅野縣|鄆城縣|鄄城縣|東明縣|中牟縣|鞏義市|滎陽市|新密市|新鄭市|登封市|杞縣|通許縣|尉氏縣|蘭考縣|孟津縣|新安縣|欒川縣|嵩縣|汝陽縣|宜陽縣|洛寧縣|伊川縣|偃師市|寶豐縣|葉縣|魯山縣|郟縣|舞鋼市|汝州市|安陽縣|湯陰縣|滑縣|內黃縣|林州市|浚縣|淇縣|新鄉縣|獲嘉縣|原陽縣|延津縣|封丘縣|長垣縣|衛輝市|輝縣市|修武縣|博愛縣|武陟縣|溫縣|沁陽市|孟州市|清豐縣|南樂縣|範縣|臺前縣|濮陽縣|鄢陵縣|襄城縣|禹州市|長葛市|舞陽縣|臨潁縣|澠池縣|盧氏縣|義馬市|靈寶市|南召縣|方城縣|西峽縣|鎮平縣|內鄉縣|淅川縣|社旗縣|唐河縣|新野縣|桐柏縣|鄧州市|民權縣|睢縣|寧陵縣|柘城縣|虞城縣|夏邑縣|永城市|羅山縣|光山縣|新縣|商城縣|固始縣|潢川縣|淮濱縣|息縣|扶溝縣|西華縣|商水縣|沈丘縣|鄲城縣|淮陽縣|太康縣|鹿邑縣|項城市|西平縣|上蔡縣|平輿縣|正陽縣|確山縣|泌陽縣|汝南縣|遂平縣|新蔡縣|陽新縣|大冶市|鄖西縣|竹山縣|竹溪縣|房縣|丹江口市|遠安縣|興山縣|秭歸縣|長陽土家族自治縣|五峯土家族自治縣|宜都市|當陽市|枝江市|南漳縣|谷城縣|保康縣|老河口市|棗陽市|宜城市|京山縣|沙洋縣|鍾祥市|孝昌縣|大悟縣|雲夢縣|應城市|安陸市|漢川市|公安縣|監利縣|江陵縣|石首市|洪湖市|松滋市|團風縣|紅安縣|羅田縣|英山縣|浠水縣|蘄春縣|黃梅縣|麻城市|武穴市|嘉魚縣|通城縣|崇陽縣|通山縣|赤壁市|隨縣|廣水市|恩施市|利川市|建始縣|巴東縣|宣恩縣|咸豐縣|來鳳縣|鶴峯縣|長沙縣|瀏陽市|寧鄉市|寧鄉縣|株洲縣|攸縣|茶陵縣|炎陵縣|醴陵市|湘潭縣|湘鄉市|韶山市|衡陽縣|衡南縣|衡山縣|衡東縣|祁東縣|耒陽市|常寧市|邵東縣|新邵縣|邵陽縣|隆回縣|洞口縣|綏寧縣|新寧縣|城步苗族自治縣|武岡市|岳陽縣|華容縣|湘陰縣|平江縣|汨羅市|臨湘市|安鄉縣|漢壽縣|澧縣|臨澧縣|桃源縣|石門縣|津市市|慈利縣|桑植縣|南縣|桃江縣|安化縣|沅江市|桂陽縣|宜章縣|永興縣|嘉禾縣|臨武縣|汝城縣|桂東縣|安仁縣|資興市|祁陽縣|東安縣|雙牌縣|道縣|江永縣|寧遠縣|藍山縣|新田縣|江華瑤族自治縣|中方縣|沅陵縣|辰溪縣|漵浦縣|會同縣|麻陽苗族自治縣|新晃侗族自治縣|芷江侗族自治縣|靖州苗族侗族自治縣|通道侗族自治縣|洪江市|雙峯縣|新化縣|冷水江市|漣源市|吉首市|瀘溪縣|鳳凰縣|花垣縣|保靖縣|古丈縣|永順縣|龍山縣|始興縣|仁化縣|翁源縣|乳源瑤族自治縣|新豐縣|樂昌市|南雄市|澳門大學橫琴校區(由澳門管轄)|南澳縣|台山市|開平市|鶴山市|恩平市|遂溪縣|徐聞縣|廉江市|雷州市|吳川市|高州市|化州市|信宜市|廣寧縣|懷集縣|封開縣|德慶縣|四會市|博羅縣|惠東縣|龍門縣|大埔縣|豐順縣|五華縣|平遠縣|蕉嶺縣|興寧市|海豐縣|陸河縣|陸豐市|紫金縣|龍川縣|連平縣|和平縣|東源縣|陽西縣|陽春市|佛岡縣|陽山縣|連山壯族瑤族自治縣|連南瑤族自治縣|英德市|連州市|饒平縣|揭西縣|惠來縣|普寧市|新興縣|鬱南縣|羅定市|隆安縣|馬山縣|上林縣|賓陽縣|橫縣|柳城縣|鹿寨縣|融安縣|融水苗族自治縣|三江侗族自治縣|陽朔縣|靈川縣|全州縣|興安縣|永福縣|灌陽縣|龍勝各族自治縣|資源縣|平樂縣|荔浦縣|恭城瑤族自治縣|蒼梧縣|藤縣|蒙山縣|岑溪市|合浦縣|上思縣|東興市|靈山縣|浦北縣|平南縣|桂平市|容縣|陸川縣|博白縣|興業縣|北流市|田東縣|平果縣|德保縣|那坡縣|凌雲縣|樂業縣|田林縣|西林縣|隆林各族自治縣|靖西市|昭平縣|鐘山縣|富川瑤族自治縣|南丹縣|天峨縣|鳳山縣|東蘭縣|羅城仫佬族自治縣|環江毛南族自治縣|巴馬瑤族自治縣|都安瑤族自治縣|大化瑤族自治縣|忻城縣|象州縣|武宣縣|金秀瑤族自治縣|合山市|扶綏縣|寧明縣|龍州縣|大新縣|天等縣|憑祥市|西沙羣島|南沙羣島|中沙羣島的島礁及其海域|城口縣|豐都縣|墊江縣|忠縣|雲陽縣|奉節縣|巫山縣|巫溪縣|石柱土家族自治縣|秀山土家族苗族自治縣|酉陽土家族苗族自治縣|彭水苗族土家族自治縣|金堂縣|大邑縣|蒲江縣|新津縣|都江堰市|彭州市|邛崍市|崇州市|簡陽市|榮縣|富順縣|米易縣|鹽邊縣|瀘縣|合江縣|敘永縣|古藺縣|中江縣|廣漢市|什邡市|綿竹市|三臺縣|鹽亭縣|梓潼縣|北川羌族自治縣|平武縣|江油市|旺蒼縣|青川縣|劍閣縣|蒼溪縣|蓬溪縣|射洪縣|大英縣|威遠縣|資中縣|隆昌市|犍爲縣|井研縣|夾江縣|沐川縣|峨邊彝族自治縣|馬邊彝族自治縣|峨眉山市|南部縣|營山縣|蓬安縣|儀隴縣|西充縣|閬中市|仁壽縣|洪雅縣|丹棱縣|青神縣|宜賓縣|江安縣|長寧縣|高縣|珙縣|筠連縣|興文縣|屏山縣|嶽池縣|武勝縣|鄰水縣|華鎣市|宣漢縣|開江縣|大竹縣|渠縣|萬源市|滎經縣|漢源縣|石棉縣|天全縣|蘆山縣|寶興縣|通江縣|南江縣|平昌縣|安嶽縣|樂至縣|馬爾康市|汶川縣|理縣|茂縣|松潘縣|九寨溝市|金川縣|小金縣|黑水縣|壤塘縣|阿壩縣|若爾蓋縣|紅原縣|康定市|瀘定縣|丹巴縣|九龍縣|雅江縣|道孚縣|爐霍縣|甘孜縣|新龍縣|德格縣|白玉縣|石渠縣|色達縣|理塘縣|巴塘縣|鄉城縣|稻城縣|得榮縣|西昌市|木裏藏族自治縣|鹽源縣|德昌縣|會理縣|會東縣|寧南縣|普格縣|布拖縣|金陽縣|昭覺縣|喜德縣|冕寧縣|越西縣|甘洛縣|美姑縣|雷波縣|開陽縣|息烽縣|修文縣|清鎮市|水城縣|盤州市|桐梓縣|綏陽縣|正安縣|道真仡佬族苗族自治縣|務川仡佬族苗族自治縣|鳳岡縣|湄潭縣|餘慶縣|習水縣|赤水市|仁懷市|普定縣|鎮寧布依族苗族自治縣|關嶺布依族苗族自治縣|紫云苗族布依族自治縣|大方縣|黔西縣|金沙縣|織金縣|納雍縣|威寧彝族回族苗族自治縣|赫章縣|江口縣|玉屏侗族自治縣|石阡縣|思南縣|印江土家族苗族自治縣|德江縣|沿河土家族自治縣|松桃苗族自治縣|興義市|興仁縣|普安縣|晴隆縣|貞豐縣|望謨縣|冊亨縣|安龍縣|凱裏市|黃平縣|施秉縣|三穗縣|鎮遠縣|岑鞏縣|天柱縣|錦屏縣|劍河縣|臺江縣|黎平縣|榕江縣|從江縣|雷山縣|麻江縣|丹寨縣|都勻市|福泉市|荔波縣|貴定縣|甕安縣|獨山縣|平塘縣|羅甸縣|長順縣|龍里縣|惠水縣|三都水族自治縣|富民縣|宜良縣|石林彝族自治縣|嵩明縣|祿勸彝族苗族自治縣|尋甸回族彝族自治縣|安寧市|馬龍縣|陸良縣|師宗縣|羅平縣|富源縣|會澤縣|宣威市|澄江縣|通海縣|華寧縣|易門縣|峨山彝族自治縣|新平彝族傣族自治縣|元江哈尼族彝族傣族自治縣|施甸縣|龍陵縣|昌寧縣|騰衝市|魯甸縣|巧家縣|鹽津縣|大關縣|永善縣|綏江縣|鎮雄縣|彝良縣|威信縣|水富縣|玉龍納西族自治縣|永勝縣|華坪縣|寧蒗彝族自治縣|寧洱哈尼族彝族自治縣|墨江哈尼族自治縣|景東彝族自治縣|景谷傣族彝族自治縣|鎮沅彝族哈尼族拉祜族自治縣|江城哈尼族彝族自治縣|孟連傣族拉祜族佤族自治縣|瀾滄拉祜族自治縣|西盟佤族自治縣|鳳慶縣|雲縣|永德縣|鎮康縣|雙江拉祜族佤族布朗族傣族自治縣|耿馬傣族佤族自治縣|滄源佤族自治縣|楚雄市|雙柏縣|牟定縣|南華縣|姚安縣|大姚縣|永仁縣|元謀縣|武定縣|祿豐縣|箇舊市|開遠市|蒙自市|彌勒市|屏邊苗族自治縣|建水縣|石屏縣|瀘西縣|元陽縣|紅河縣|金平苗族瑤族傣族自治縣|綠春縣|河口瑤族自治縣|文山市|硯山縣|西疇縣|麻栗坡縣|馬關縣|丘北縣|廣南縣|富寧縣|景洪市|勐海縣|勐臘縣|大理市|漾濞彝族自治縣|祥雲縣|賓川縣|彌渡縣|南澗彝族自治縣|巍山彝族回族自治縣|永平縣|雲龍縣|洱源縣|劍川縣|鶴慶縣|瑞麗市|芒市|梁河縣|盈江縣|隴川縣|瀘水市|福貢縣|貢山獨龍族怒族自治縣|蘭坪白族普米族自治縣|香格里拉市|德欽縣|維西傈僳族自治縣|林周縣|當雄縣|尼木縣|曲水縣|墨竹工卡縣|南木林縣|江孜縣|定日縣|薩迦縣|拉孜縣|昂仁縣|謝通門縣|白朗縣|仁布縣|康馬縣|定結縣|仲巴縣|亞東縣|吉隆縣|聶拉木縣|薩嘎縣|崗巴縣|江達縣|貢覺縣|類烏齊縣|丁青縣|察雅縣|八宿縣|左貢縣|芒康縣|洛隆縣|邊壩縣|工布江達縣|米林縣|墨脫縣|波密縣|察隅縣|朗縣|扎囊縣|貢嘎縣|桑日縣|瓊結縣|曲松縣|措美縣|洛扎縣|加查縣|隆子縣|錯那縣|浪卡子縣|嘉黎縣|比如縣|聶榮縣|安多縣|申扎縣|索縣|班戈縣|巴青縣|尼瑪縣|雙湖縣|普蘭縣|札達縣|噶爾縣|日土縣|革吉縣|改則縣|措勤縣|藍田縣|周至縣|宜君縣|鳳翔縣|岐山縣|扶風縣|眉縣|隴縣|千陽縣|麟遊縣|鳳縣|太白縣|三原縣|涇陽縣|乾縣|禮泉縣|永壽縣|彬縣|長武縣|旬邑縣|淳化縣|武功縣|興平市|潼關縣|大荔縣|合陽縣|澄城縣|蒲城縣|白水縣|富平縣|韓城市|華陰市|延長縣|延川縣|子長縣|志丹縣|吳起縣|甘泉縣|富縣|洛川縣|宜川縣|黃龍縣|黃陵縣|城固縣|洋縣|西鄉縣|勉縣|寧強縣|略陽縣|鎮巴縣|留壩縣|佛坪縣|府谷縣|靖邊縣|定邊縣|綏德縣|米脂縣|佳縣|吳堡縣|清澗縣|子洲縣|神木市|漢陰縣|石泉縣|寧陝縣|紫陽縣|嵐皋縣|平利縣|鎮坪縣|旬陽縣|白河縣|洛南縣|丹鳳縣|商南縣|山陽縣|鎮安縣|柞水縣|永登縣|皋蘭縣|榆中縣|永昌縣|靖遠縣|會寧縣|景泰縣|清水縣|秦安縣|甘谷縣|武山縣|張家川回族自治縣|民勤縣|古浪縣|天祝藏族自治縣|肅南裕固族自治縣|民樂縣|臨澤縣|高臺縣|山丹縣|涇川縣|靈臺縣|崇信縣|華亭縣|莊浪縣|靜寧縣|金塔縣|瓜州縣|肅北蒙古族自治縣|阿克塞哈薩克族自治縣|玉門市|敦煌市|慶城縣|環縣|華池縣|合水縣|正寧縣|寧縣|鎮原縣|通渭縣|隴西縣|渭源縣|臨洮縣|漳縣|岷縣|成縣|文縣|宕昌縣|康縣|西和縣|禮縣|徽縣|兩當縣|臨夏市|臨夏縣|康樂縣|永靖縣|廣河縣|和政縣|東鄉族自治縣|積石山保安族東鄉族撒拉族自治縣|合作市|臨潭縣|卓尼縣|舟曲縣|迭部縣|瑪曲縣|碌曲縣|夏河縣|大通回族土族自治縣|湟中縣|湟源縣|民和回族土族自治縣|互助土族自治縣|化隆回族自治縣|循化撒拉族自治縣|門源回族自治縣|祁連縣|海晏縣|剛察縣|同仁縣|尖扎縣|澤庫縣|河南蒙古族自治縣|共和縣|同德縣|貴德縣|興海縣|貴南縣|瑪沁縣|班瑪縣|甘德縣|達日縣|久治縣|瑪多縣|玉樹市|雜多縣|稱多縣|治多縣|囊謙縣|曲麻萊縣|格爾木市|德令哈市|烏蘭縣|都蘭縣|天峻縣|海西蒙古族藏族自治州直轄|永寧縣|賀蘭縣|靈武市|平羅縣|鹽池縣|同心縣|青銅峽市|西吉縣|隆德縣|涇源縣|彭陽縣|中寧縣|海原縣|烏魯木齊縣|鄯善縣|托克遜縣|巴裏坤哈薩克自治縣|伊吾縣|昌吉市|阜康市|呼圖壁縣|瑪納斯縣|奇臺縣|吉木薩爾縣|木壘哈薩克自治縣|博樂市|阿拉山口市|精河縣|溫泉縣|庫爾勒市|輪臺縣|尉犁縣|若羌縣|且末縣|焉耆回族自治縣|和靜縣|和碩縣|博湖縣|阿克蘇市|溫宿縣|庫車縣|沙雅縣|新和縣|拜城縣|烏什縣|阿瓦提縣|柯坪縣|阿圖什市|阿克陶縣|阿合奇縣|烏恰縣|喀什市|疏附縣|疏勒縣|英吉沙縣|澤普縣|莎車縣|葉城縣|麥蓋提縣|嶽普湖縣|伽師縣|巴楚縣|塔什庫爾干塔吉克自治縣|和田市|和田縣|墨玉縣|皮山縣|洛浦縣|策勒縣|于田縣|民豐縣|伊寧市|奎屯市|霍爾果斯市|伊寧縣|察布查爾錫伯自治縣|霍城縣|鞏留縣|新源縣|昭蘇縣|特克斯縣|尼勒克縣|塔城市|烏蘇市|額敏縣|沙灣縣|托里縣|裕民縣|和布克賽爾蒙古自治縣|阿勒泰市|布爾津縣|富蘊縣|福海縣|哈巴河縣|青河縣|吉木乃縣|喀爾交鎮|恰勒什海鄉|託普鐵熱克鎮|別斯鐵熱克鄉|吉木乃鎮|託斯特鄉|兵團一八六團|烏拉斯特鎮|兵團一五二團|向陽街道|紅山街道|東城街道|石河子鄉|老街街道|北泉鎮|新城街道|阿拉爾農場|幸福路街道|兵團第一師幸福農場|兵團七團|兵團十一團|兵團第一師水利水電工程處|青松路街道|託喀依鄉|兵團八團|中心監獄|兵團第一師塔里木灌區水利管理處|兵團十四團|兵團十二團|兵團十三團|金銀川路街道|兵團十六團|兵團十團|南口街道|兵團四十九團|兵團圖木舒克市永安壩|兵團五十一團|前海街道|兵團圖木舒克市喀拉拜勒鎮|永安壩街道|齊幹卻勒街道|兵團五十團|兵團五十三團|兵團四十四團|兵團一零二團|軍墾路街道|人民路街道|兵團一零一團|兵團一零三團|青湖路街道|兵團二十九團|農二師三十團|兵團六十八團|都拉塔口岸|兵團六十六團|兵團六十三團|兵團六十七團|兵團六十四團|烏爾其鄉|普恰克其鄉|兵團皮山農場|兵團二二四團|兵團四十七團|博斯坦鄉|喀拉喀什鎮|闊依其鄉|兵團一牧場|烏魯克薩依鄉|奴爾鄉|兵團一零三|坡頭鎮|梨林鎮|思禮鎮|大峪鎮|五龍口鎮|王屋鎮|玉泉街道|軹城鎮|濟水街道|沁園街道|下冶鎮|天壇街道|克井鎮|邵原鎮|北海街道|承留鎮|沙湖鎮|工業園區|畜禽良種場|豆河鎮|通海口鎮|胡場鎮|長倘口鎮|五湖漁場|楊林尾鎮|幹河街道|西流河鎮|趙西垸林場|九合垸原種場|彭場鎮|沔城回族鎮|龍華山街道|沙湖原種場|陳場鎮|郭河鎮|排湖風景區|鄭場鎮|沙嘴街道|張溝鎮|毛嘴鎮|三伏潭鎮|積玉口鎮|廣華街道|泰豐街道|潛江經濟開發區|周磯管理區|周磯街道|總口管理區|高場街道|王場鎮|運糧湖管理區|園林街道|白鷺湖管理區|竹根灘鎮|漁洋鎮|熊口鎮|後湖管理區|熊口管理區|江漢石油管理局|張金鎮|楊市街道|老新鎮|龍灣鎮|浩口原種場|浩口鎮|高石碑鎮|胡市鎮|多祥鎮|黃潭鎮|沉湖管委會|橫林鎮|馬灣鎮|幹驛鎮|蔣湖農場|小板鎮|多寶鎮|嶽口鎮|蔣場鎮|石家河鎮|彭市鎮|竟陵街道|九真鎮|佛子山鎮|僑鄉街道開發區|麻洋鎮|楊林街道|白茅湖農場|汪場鎮|漁薪鎮|淨潭鄉|盧市鎮|皁市鎮|拖市鎮|張港鎮|下谷坪土家族鄉|木魚鎮|新華鎮|九湖鎮|宋洛鄉|松柏鎮|紅坪鎮|陽日鎮|常平鎮|莞城街道|望牛墩鎮|大朗鎮|麻涌鎮|黃江鎮|鳳崗鎮|樟木頭鎮|東莞生態園|松山湖管委會|橋頭鎮|石龍鎮|寮步鎮|高埗鎮|塘廈鎮|厚街鎮|謝崗鎮|虎門鎮|南城街道|虎門港管委會|橫瀝鎮|企石鎮|東坑鎮|東城街道|石排鎮|洪梅鎮|沙田鎮|長安鎮|道滘鎮|大嶺山鎮|清溪鎮|茶山鎮|中堂鎮|萬江街道|石碣鎮|橫欄鎮|三角鎮|五桂山街道|東昇鎮|神灣鎮|火炬開發區街道|小欖鎮|南朗鎮|古鎮鎮|民衆鎮|港口鎮|三鄉鎮|石岐區街道|大涌鎮|南頭鎮|黃圃鎮|東區街道|阜沙鎮|板芙鎮|西區街道|坦洲鎮|南區街道|沙溪鎮|東鳳鎮|洋浦經濟開發區|光村鎮|蘭洋鎮|海頭鎮|和慶鎮|華南熱作學院|國營藍洋農場|中和鎮|王五鎮|木棠鎮|東成鎮|新州鎮|南豐鎮|排浦鎮|國營西培農場|雅星鎮|國營八一農場|國營西聯農場|白馬井鎮|那大鎮|峨蔓鎮|大成鎮|三都鎮|南聖鎮|毛陽鎮|國營暢好農場|番陽鎮|水滿鄉|通什鎮|暢好鄉|毛道鄉|嘉積鎮|會山鎮|國營東昇農場|國營東太農場|彬村山華僑農場|萬泉鎮|大路鎮|潭門鎮|國營東紅農場|中原鎮|長坡鎮|龍江鎮|塔洋鎮|博鰲鎮|陽江鎮|石壁鎮|東閣鎮|國營羅豆農場|文教鎮|會文鎮|錦山鎮|翁田鎮|東郊鎮|國營東路農場|鋪前鎮|龍樓鎮|馮坡鎮|國營南陽農場|昌灑鎮|公坡鎮|蓬萊鎮|抱羅鎮|潭牛鎮|東路鎮|文城鎮|重興鎮|禮紀鎮|國營東興農場|後安鎮|國營東和農場|萬城鎮|和樂鎮|大茂鎮|山根鎮|龍滾鎮|興隆華僑農場|三更羅鎮|北大鎮|長豐鎮|地方國營六連林場|國營新中農場|南橋鎮|東澳鎮|東方華僑農場|新龍鎮|江邊鄉|國營廣壩農場|天安鄉|東河鎮|感城鎮|三家鎮|四更鎮|大田鎮|板橋鎮|八所鎮|黃竹鎮|新竹鎮|國營中瑞農場|富文鎮|嶺口鎮|定城鎮|雷鳴鎮|翰林鎮|國營南海農場|龍河鎮|國營金雞嶺農場|龍湖鎮|龍門鎮|國營中建農場|屯城鎮|南呂鎮|坡心鎮|新興鎮|國營中坤農場|西昌鎮|楓木鎮|南坤鎮|烏坡鎮|永發鎮|福山鎮|中興鎮|橋頭鎮|金江鎮|老城鎮|文儒鎮|國營紅崗農場|瑞溪鎮|國營紅光農場|大豐鎮|加樂鎮|國營崑崙農場|國營金安農場|國營西達農場|國營和嶺農場|仁興鎮|南寶鎮|博厚鎮|和舍鎮|東英鎮|調樓鎮|波蓮鎮|多文鎮|國營加來農場|新盈鎮|臨城鎮|皇桐鎮|國營紅華農場|七坊鎮|金波鄉|南開鄉|榮邦鄉|青松鄉|國營龍江農場|邦溪鎮|元門鄉|國營白沙農場|牙叉鎮|細水鄉|打安鎮|阜龍鄉|國營邦溪農場|國營霸王嶺林場|十月田鎮|石碌鎮|海南礦業聯合有限公司|七叉鎮|烏烈鎮|叉河鎮|王下鄉|海尾鎮|國營紅林農場|昌化鎮|國營山榮農場|鶯歌海鎮|國營樂光農場|萬衝鎮|利國鎮|國營保國農場|抱由鎮|九所鎮|國營鶯歌海鹽場|黃流鎮|大安鎮|佛羅鎮|尖峯鎮|千家鎮|志仲鎮|國營尖峯嶺林業公司|椰林鎮|黎安鎮|羣英鄉|新村鎮|國營吊羅山林業公司|本號鎮|光坡鎮|文羅鎮|國營南平農場|隆廣鎮|提蒙鄉|三才鎮|國營嶺門農場|英州鎮|海南保亭熱帶作物研究所|新政鎮|加茂鎮|國營新星農場|保城鎮|國營金江農場|南林鄉|國營三道農場|毛感鄉|響水鎮|什玲鎮|三道鎮|六弓鄉|吊羅山鄉|國營加釵農場|和平鎮|國營烏石農場|什運鄉|灣嶺鎮|國營陽江農場|國營黎母山林業公司|營根鎮|上安鄉|中平鎮|黎母山鎮|國營長征農場|紅毛鎮|長征鎮|峪泉鎮|新城鎮|文殊鎮|雄關區|鏡鐵區|長城區|[^區]+區)";
		String detailAddress = "?(?<detail>.*)";
		Matcher matcher = Pattern.compile(regex+countyRegex+detailAddress).matcher(address);
		String province, city, county,detail;
		Map<String, String> row  = new LinkedHashMap <>(3);
		while (matcher.find()) {
			province = matcher.group("province");
			row.put("province", province==null?null:province.trim());
			city = matcher.group("city");
			row.put("city", city==null?null:city.trim());
			county = matcher.group("county");
			row.put("county", county==null?null:county.trim());
			detail = matcher.group("detail");
			row.put("detail", detail==null?"":detail.trim());
		}
		return row;
	}

這種方式的話可以匹配文本中包含省市區的信息,但是地址是死的,一旦地址名稱改變了,或者新增了其他地址,那我們就要重新維護第三級的地址,及其麻煩,代碼可讀性也不好.
其它方式基本上都是這種暴力解析的方式,真的不適合我們實際開發中使用.
後期我會推出如何通過數據庫準確查詢地址,且輸入兩級自動匹配出第三級,達到真正的智能識別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章