Last active
August 29, 2015 14:23
-
-
Save ytabuchi/bc69e98bdc3b940641c3 to your computer and use it in GitHub Desktop.
住所から都道府県と地域を特定するクラスとメソッド
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
// http://hogehoge.tk/personal/ で作成 | |
var address = new List<Address> { | |
new Address { FullAddress = "沖縄県那覇市田原3-16-3" }, | |
new Address { FullAddress = "愛媛県西条市天神2-1" }, | |
... | |
... | |
}; | |
var city = new SpecifyCity(); | |
var area = new SpecifyArea(); | |
foreach (var item in address) | |
{ | |
item.City = city.Specify(item.FullAddress); | |
item.Area = area.Specify(item.City); | |
Console.WriteLine(item.Area + ": " + item.City + ": " + item.FullAddress); | |
} | |
} | |
} | |
class SpecifyCity | |
{ | |
/// <summary> | |
/// 住所から都道府県を特定するメソッドです。 | |
/// </summary> | |
/// <param name="address">住所</param> | |
/// <returns></returns> | |
public string Specify(string address) | |
{ | |
// 都道府県が省略されそうな東京都、大阪府、京都府、神奈川県、愛知県のみ、政令指定都市(?)をマッチさせます。 | |
const string tokyoRegex = "(千代田区|中央区|港区|新宿区|文京区|台東区|墨田区|江東区|品川区|目黒区|大田区|世田谷区|渋谷区|中野区|杉並区|豊島区|北区|荒川区|板橋区|練馬区|足立区|葛飾区|江戸川区|八王子市|立川市|武蔵野市|三鷹市|府中市|昭島市|調布市|町田市|小金井市|日野市|国分寺市|国立市|狛江市|東大和市|武蔵村山市|多摩市|稲城市|小平市|東村山市|西東京市|清瀬市|東久留米市|青梅市|福生市|羽村市|あきる野市|瑞穂町|日の出町|檜原村|奥多摩町)"; | |
const string osakaRegex = "(大阪市|堺市|堺市|能勢町|豊能町|池田市|箕面市|豊中市|茨木市|高槻市|島本町|吹田市|摂津市|枚方市|交野市|寝屋川市|守口市|門真市|四條畷市|大東市|東大阪市|八尾市|柏原市|和泉市|高石市|泉大津市|忠岡町|岸和田市|貝塚市|熊取町|泉佐野市|田尻町|泉南市|阪南市|岬町|松原市|羽曳野市|藤井寺市|太子町|河南町|千早赤阪村|富田林市|大阪狭山市|河内長野市|西区|浪速区|西成区|港区|此花区|西淀川区|東淀川区|東成区|天王寺区|住吉区|大正区|旭区|福島区|都島区|城東区|生野区|阿倍野区|東住吉区|淀川区|鶴見区|平野区|住之江区|中央区|北区|堺区|中区|東区|南区|美原区)"; | |
const string kyotoRegex = "(京都市|福知山市|舞鶴市|綾部市|宇治市|宮津市|亀岡市|城陽市|向日市|長岡京市|八幡市|京田辺市|京丹後市|南丹市|木津川市|大山崎町|久御山町|井手町|宇治田原町|笠置町|和束町|精華町|南山城村|京丹波町|伊根町|与謝野町)"; | |
const string kanagawaRegex = "(横浜市|鶴見区|神奈川区|西区|中区|南区|港南区|保土ケ谷区|旭区|磯子区|金沢区|港北区|緑区|青葉区|都筑区|戸塚区|栄区|泉区|瀬谷区|川崎市|川崎区|幸区|中原区|高津区|宮前区|多摩区|麻生区|相模原市|緑区|中央区|南区|横須賀市|平塚市|鎌倉市|藤沢市|小田原市|茅ヶ崎市|逗子市|三浦市|秦野市|厚木市|大和市|伊勢原市|海老名市|座間市|南足柄市|綾瀬市)"; | |
const string aichiRegex = "(名古屋市|千種区|東区|北区|西区|中村区|中区|昭和区|瑞穂区|熱田区|中川区|港区|南区|守山区|緑区|名東区|天白区|一宮市|瀬戸市|春日井市|犬山市|江南市|小牧市|稲沢市|尾張旭市|岩倉市|豊明市|日進市|清須市|北名古屋市|長久手市|東郷町|豊山町|大口町|扶桑町|津島市|愛西市|弥富市|あま市|大治町|蟹江町|飛島村|半田市|常滑市|東海市|大府市|知多市|阿久比町|東浦町|南知多町|美浜町|武豊町|岡崎市|碧南市|刈谷市|豊田市|安城市|西尾市|知立市|高浜市|みよし市|幸田町|豊橋市|豊川市|蒲郡市|新城市|田原市|設楽町|東栄町|豊根村)"; | |
// address に都道府県が含まれていれば都道府県名を返し、それ以外で各正規表現に該当すればそれぞれの県名を返します。 | |
System.Text.RegularExpressions.Match m; | |
m = System.Text.RegularExpressions.Regex.Match(address, ".*?(東京都|道|府|県)"); | |
if (m.Value != "") | |
{ | |
return m.Value; | |
} | |
if (System.Text.RegularExpressions.Regex.IsMatch(address, tokyoRegex)) | |
return "東京都"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(address, osakaRegex)) | |
return "大阪府"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(address, kyotoRegex)) | |
return "京都府"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(address, kanagawaRegex)) | |
return "神奈川県"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(address, aichiRegex)) | |
return "愛知県"; | |
return "不明"; | |
} | |
} | |
class SpecifyArea | |
{ | |
/// <summary> | |
/// 都道府県名から地域名を特定するメソッドです。 | |
/// </summary> | |
/// <param name="city">都道府県名</param> | |
/// <returns></returns> | |
public string Specify(string city) | |
{ | |
string area = ""; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(東京都|神奈川県|埼玉県|千葉県|茨城県|栃木県|群馬県)")) | |
area = "関東"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(大阪府|京都府|三重県|滋賀県|兵庫県|奈良県|和歌山県)")) | |
area = "近畿"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(新潟県|富山県|石川県|福井県|山梨県|長野県|岐阜県|静岡県|愛知県)")) | |
area = "中部"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(福岡県|佐賀県|長崎県|熊本県|大分県|宮崎県|鹿児島県|沖縄県)")) | |
area = "九州"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(青森県|岩手県|宮城県|秋田県|山形県|福島県)")) | |
area = "東北"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "北海道")) | |
area = "北海道"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(鳥取県|島根県|岡山県|広島県|山口県)")) | |
area = "中国"; | |
if (System.Text.RegularExpressions.Regex.IsMatch(city, "(徳島県|香川県|愛媛県|高知県)")) | |
area = "四国"; | |
return area; | |
} | |
} | |
class Address | |
{ | |
public string Area { get; set; } | |
public string City { get; set; } | |
public string FullAddress { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment