質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1044閲覧

住所文字列の文末にある不要な文字列を正規表現で削除したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/17 08:00

前提・実現したいこと

住所の文字列の文末にある不要な文字列を削除したいです。

例 (住所はダミーです)
京都府京都市右京区XXX1-1-1 【本社】本社です
=> 抽出結果 京都府京都市右京区XXX1-1-1

京都府京都市右京区XXX1-1-1京都ビル1F ※詳しくはこちら
=> 抽出結果 京都府京都市右京区XXX1-1-1京都ビル1F

京都府京都市右京区XXX1-1-1京都ビル3階 京都の住所です
=> 抽出結果 京都府京都市右京区XXX1-1-1京都ビル3階

上記のように元データから不要な文字列を削除して、きれいな住所になるようにしたいです。

発生している問題・エラーメッセージ

住所の後に記載される文字列に様々なパターンがあり、きれいに削除することが難しい状況です。
すべての不要文字列のパターンに適応した正規表現を書くのは現実的ではないため、
住所が
・F
・階
・数字
で終わるとして、それ以降の不要文字列を削除するコードを書いてみています。

Python

1# addressは例です 2address1 = '京都府京都市右京区京都駅ビル3-5-6 10F 新卒歓迎・未経験者歓迎' 3address2 = '東京都港区TBSビル1-2-3 25階 打ち合わせ室' 4address3 = '北海道札幌市中央区1-100 駐車場なし、近くのコインパーキングをご利用ください' 5# ここでF、階、数字を判定する 6character = 7if character == "F" or character == "階": 8# Fまたは階以降を取り除く 9elif character not in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: 10# 数字以降を取り除く 11 12# 結果 13# address1 = '京都府京都市右京区京都駅ビル3-5-6 10F' 14# address2 = '東京都港区TBSビル1-2-3 25階' 15# address3 = '北海道札幌市中央区1-100'

Fの位置を取得することができない、または、別のFに反応してしまうなどして適切なコードが見つからずにいます。
上記の問題を解消し、きれいな住所文字列のみを抽出できる方法を教えていただきたいです。
よろしくお願いいたします

補足情報(FW/ツールのバージョンなど)

Pycharm
python 3.8.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

提示されたサンプルだと以下でよさそうですが、住所表記は奥が深いので、完璧を目指すならまだまだ調整が必要そうです。

Python

1import re 2 3l = [ 4'京都府京都市右京区XXX1-1-1 【本社】本社です', 5'京都府京都市右京区XXX1-1-1京都ビル1F ※詳しくはこちら', 6'京都府京都市右京区XXX1-1-1京都ビル3階 京都の住所です', 7'京都府京都市右京区京都駅ビル3-5-6 10F 新卒歓迎・未経験者歓迎', 8'東京都港区TBSビル1-2-3 25階 打ち合わせ室', 9'北海道札幌市中央区1-100 駐車場なし、近くのコインパーキングをご利用ください' 10] 11 12r = re.compile(r'.*[階F\d]') # F,階,数字で終わる 13 14for s in l: 15 m = r.match(s) 16 if m: 17 print(m.group(0)) 18""" 19京都府京都市右京区XXX1-1-1 20京都府京都市右京区XXX1-1-1京都ビル1F 21京都府京都市右京区XXX1-1-1京都ビル3階 22京都府京都市右京区京都駅ビル3-5-6 10F 23東京都港区TBSビル1-2-3 25階 24北海道札幌市中央区1-100 25"""

投稿2021/09/17 08:26

編集2021/09/17 23:48
can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2021/09/17 13:35

[階|F|\d] だと | も含んじゃいます。
can110

2021/09/17 23:47

あ。ご指摘ありがとうございます。
guest

0

ベストアンサー

示されている条件なら以下でできるでしょう。

python

1>>> import re 2>>> 3>>> address1 = '京都府京都市右京区京都駅ビル3-5-6 10F 新卒歓迎未経験者歓迎' 4>>> address2 = '東京都港区TBSビル1-2-3 25階 打ち合わせ室' 5>>> address3 = '北海道札幌市中央区1-100 駐車場なし、近くのコインパーキングをご利用ください' 6>>> 7>>> print(re.sub('[^\dF階]*$', '', address1)) 8京都府京都市右京区京都駅ビル3-5-6 10F 9>>> print(re.sub('[^\dF階]*$', '', address2)) 10東京都港区TBSビル1-2-3 2511>>> print(re.sub('[^\dF階]*$', '', address3)) 12北海道札幌市中央区1-100

投稿2021/09/17 08:22

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/17 08:31

解決できました!ありがとうございました!!
guest

0

正規表現を使えば、「F」か「階」か数字で終わる文字列を検索できます。

Pythonのre.matchは、常に文字列先頭からの検索になります。

python

1import re 2 3lst = ['京都府京都市右京区京都駅ビル3-5-6 10F 新卒歓迎・未経験者歓迎', 4 '東京都港区TBSビル1-2-3 25階 打ち合わせ室', 5 '北海道札幌市中央区1-100 駐車場なし、近くのコインパーキングをご利用ください'] 6 7pat = re.compile(r".*(?:F|階|\d)") 8 9for addr in lst: 10 m = pat.match(addr) 11 if m: 12 addr = m[0] 13 print(addr)

result

1京都府京都市右京区京都駅ビル3-5-6 10F 2東京都港区TBSビル1-2-3 25階 3北海道札幌市中央区1-100

不要な文字列に「階」や数字が書いてあったらダメですけどね。

投稿2021/09/17 08:15

編集2021/09/17 08:17
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問