こんにちは、毎日100km京都をバイクで無双しているChiakiと申します。
京都の洛内と呼ばれる京都の中心部では、通り名と呼ばれる通りの名前をつけて住所を表記する場合があります。
例えば、京都府京都市右京区西大路通御池下る西小路町111なら西大路通御池下るが通り名です。しかしこの通り名がついていると、ナビアプリに入力した時、地点が特定できない(ヒットしない)ケースが多々あります。京都府京都市右京区西小路町111と入力すると検索できます。そのため通り名を削除して検索するのですが、住所の途中にあるのでなんとも選択しにくいこと……。そのため通り名を検出する正規表現を、考えました。京都の通り名を含む住所を含めて全国すべての住所にヒットする正規表現とも言えます。
多くのケースで検出できると信じていますが、もし検出できないケースを見つけたらコメントお待ちしております!直します。
はよ正規表現をくれ
忙しい人のために。
正規表現のテストができ、ライブラリとしての機能もあるregex101.comにもアップロードしてあります。
/(京都府)?(京都市)?([上中下左右]京区|東山区)?(?:.+[東西上下]+[入るルル]+)(.+)/
テストケースです。すべて抽出できます。なお住所は全てダミーです。
京都府京都市上京区室町通一条上る小島町153-8
京都府京都市上京区今出川通室町西入ル紙屋川町725-3
京都府京都市上京区新町通丸太町下る春帯町468-6
京都府京都市中京区烏丸通御池下る饅頭屋町989-7
京都府京都市中京区三条通河原町東入ル中島町301-8
京都府京都市中京区御幸町通錦小路上ル船屋町602-9
京都府京都市中京区麸屋町通六角下る坂井町803-10
京都府京都市下京区四条通柳馬場西入ル立売西町204-11
京都府京都市下京区松原通西洞院東入ル本塩竈町505-12
京都府京都市下京区花屋町通松原上る柿本町906-13
京都府京都市左京区東大路通仁王門下る東門前町407-14
京都府京都市左京区北大路通下鴨本通西入ル下鴨前萩町108-15
京都府京都市左京区白川通今出川上る石橋町809-16
京都府京都市右京区西大路通御池下る西小路町611-17
京都府京都市上京区大宮通寺之内上る二丁目西入社横町288
京都府京都市上京区大宮通寺之内下る花開院町126
京都府京都市中京区寺町通三条上る天性寺前町535
京都府京都市下京区烏丸通七条下る東塩小路町590-2
京都府京都市中京区寺町通六角上る桜之町426番地
京都府京都市下京区四条通室町東入函谷鉾町78番地
京都府京都市上京区上ノ下立売通紙屋川東入堀川町527-26
京都府京都市東山区鞘町通正面下る上堀詰町265
京都府京都市下京区松原通西洞院東入藪下町2
京都府京都市下京区東中筋通花屋町下る柳町335-3
京都府京都市下京区東洞院通四条下る元悪王子町47-4
正規表現の置換で後方参照を利用して通り名を削除するだけです。京都の通り名を含まない住所は正規表現にヒットしないので置換されずそのままになります。
$1$2$3$4