Created
January 24, 2016 00:10
-
-
Save zakuroishikuro/e816827a9593c4472109 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
require 'csv' | |
# 郵便局のサイトから郵便番号データをダウンロードしておく | |
# 同じフォルダ内のKEN_ALL.csvを読み込む | |
csv_path = File.expand_path("../KEN_ALL.CSV", __FILE__) | |
# 市区町村を取得 | |
cities = CSV.read(csv_path, encoding:"Shift_JIS:UTF-8").transpose[7].uniq | |
# 最後の文字以外に「市・区・町・村」があれば、その文字までの最長の文字列を取得 | |
res = cities.map{|city| city[/.+[市区町村](?=.*.$)/] }.compact.uniq | |
# 文字コード順にソートして、逆純にして結合 | |
# 逆順にしているのは、(余市郡余市|余市)みたいになってる場合に前の文字列をヒットさせるため | |
exceptions = res.sort.reverse * "|" | |
#=> 高市|静岡市|野々市|西村|西八代郡市|芳賀郡市|羽村|福岡市|神戸市|神崎郡市|相模原市|田村|熊本市|浜松市|武蔵村|横浜市|柴田郡村|杵島郡大町|東村|札幌市|新潟市|廿日市|広島市|川崎市|岡山市|大阪市|大町|大村|堺市|四日市|名古屋市中村|名古屋市|吉野郡下市|千葉市|十日町|北村|北九州市|余市郡余市|余市|佐波郡玉村|仙台市|京都市|中新川郡上市|さいたま市 | |
# 正規表現を作成 | |
# どうしてこの正規表現になるかはそのうちQiitaとかに書きたい | |
puts "(.{2,3}?[都道府県])((?:#{exceptions}|.)?.*?[市区町村])(.*)" | |
#=> (.{2,3}?[都道府県])((?:高市|静岡市|野々市|西村|西八代郡市|芳賀郡市|羽村|福岡市|神戸市|神崎郡市|相模原市|田村|熊本市|浜松市|武蔵村|横浜市|柴田郡村|杵島郡大町|東村|札幌市|新潟市|廿日市|広島市|川崎市|岡山市|大阪市|大町|大村|堺市|四日市|名古屋市中村|名古屋市|吉野郡下市|千葉市|十日町|北村|北九州市|余市郡余市|余市|佐波郡玉村|仙台市|京都市|中新川郡上市|さいたま市|.)?.*?[市区町村])(.*) |
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
(.{2,3}?[都道府県])((?:高市|静岡市|野々市|西村|西八代郡市|芳賀郡市|羽村|福岡市|神戸市|神崎郡市|相模原市|田村|熊本市|浜松市|武蔵村|横浜市|柴田郡村|杵島郡大町|東村|札幌市|新潟市|廿日市|広島市|川崎市|岡山市|大阪市|大町|大村|堺市|四日市|名古屋市中村|名古屋市|吉野郡下市|千葉市|十日町|北村|北九州市|余市郡余市|余市|佐波郡玉村|仙台市|京都市|中新川郡上市|さいたま市|.)?.*?[市区町村])(.*) |
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
var rex = /(.{2,3}?[都道府県])((?:高市|静岡市|野々市|西村|西八代郡市|芳賀郡市|羽村|福岡市|神戸市|神崎郡市|相模原市|田村|熊本市|浜松市|武蔵村|横浜市|柴田郡村|杵島郡大町|東村|札幌市|新潟市|廿日市|広島市|川崎市|岡山市|大阪市|大町|大村|堺市|四日市|名古屋市中村|名古屋市|吉野郡下市|千葉市|十日町|北村|北九州市|余市郡余市|余市|佐波郡玉村|仙台市|京都市|中新川郡上市|さいたま市|.)?.*?[市区町村])(.*)/ | |
var address = "東京都文京区後楽1丁目3−61" // (東京ドームの住所) | |
address = address.replace(rex, "$1 / $2 / $3") | |
console.log(address) // 東京都 / 文京区 / 後楽1丁目3−61 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment