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

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

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

1024閲覧

接尾辞のついていない都道府県の名称に正規表現で接尾辞をつける方法

qwe001

総合スコア133

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/03/15 03:10

以下のようなデータがあります

北海道 青森 青森県 神奈川 神奈川県 愛知県 群馬 東京 東京都 大阪 大阪府 京都 京都府 広島 熊本 沖縄県

見てわかるとおり、接尾辞に「都」「府」「県」がついているデータと、
ついていないデータが混在しています

接尾辞のついていないデータについては、
全て接尾辞をつけるようにしたいです。

北海道 青森県 青森県 神奈川県 神奈川県 愛知県 群馬県 東京都 東京都 大阪府 大阪府 京都府 京都府 広島県 熊本県 沖縄県

接尾辞がついているデータならば、その接尾辞を抽出することは出来ると思いますが、
接尾辞がついていないデータだけを抽出する方法がおもいつきません。

皆様お知恵をお貸し頂けませんでしょうか。

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

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

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

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

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

guest

回答4

0

たかだか46個ですから、列挙していくのがいいんじゃないでしょうか

投稿2018/03/15 03:13

y_waiwai

総合スコア87749

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

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

y_waiwai

2018/03/15 03:15

北海道だけは、北海と略したりしませんからねー
momon-ga

2018/03/15 03:22

なんで46なのかと思ったら、そういうことですね。
guest

0

ベストアンサー

たんに何パターンかにわければよいのでは?

  • ^東京(?!=都)に都を付加
  • ^(大阪|京都)(?!=府)を府を付加
  • それ以外で[^道県]$には県を付加

(北海道を北海としない前提)

投稿2018/03/15 04:03

yambejp

総合スコア114779

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

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

qwe001

2018/03/15 04:33 編集

これ!!!!!!!!まさにこれです!!これを求めていました!!!!!!!! ありがとうございます!!!!!!以下のようにすることで期待したデータになりました。 Step1. 置換前「^東京(?!=都)$」置換後「東京都」 Step2. 置換前「^(大阪|京都)(?!=府)$」置換後「$1府」 Step3. 置換前「^(?!大阪府|京都府|東京都|北海道|.*県$)(.*?)$」置換後「$1県」 求めていた回答に最も近かったのでこちらBAとさせて頂きます。 皆様回答ありがとうございました。またよろしくお願いいたします。
guest

0

どこからどういう形で文字列を取得してきて、どういう条件でどこまでやるかによって話がかなり違ってくると思います。

単純に末尾に「都道府県」がついてない都道府県名に「都道府県」の中のどれか適切な文字を追加すれば済むという話なのですか?

それとも、例えば、「青森」という文字列があったとして、それが青森県なのか青森市なのかを判別して処理しなければならないとか?

どこまで対応するかによっては、結構悩ましい問題のようです。

漢数字を数字に直す処理
https://teratail.com/questions/66834

投稿2018/03/15 03:33

編集2018/03/15 03:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

KSwordOfHaste

2018/03/15 03:53

県名に限定してでの話であるような気がしますが・・・ おっしゃるように住所の正規化はものすごく面倒な気がします。日々かわっていくものですし!
退会済みユーザー

退会済みユーザー

2018/03/15 04:02

住所の正規化の他に、例えば、「青森はリンゴの産地として有名である」というような文字列から、その中の「青森」が県なのか市なのかそれともそれ以外なのかを判定して・・・というような話もあるかもと思ったりしてます。考えすぎなのかもしれませんが。
qwe001

2018/03/15 04:06

ご回答ありがとうございます。市区町村が入るパターンはありません。全て都道府県名のみです。 条件は、「県」のついていないものに「県」をつけるだけでも出来ればそれでOKだと考えています。 大阪・京都・東京に府や都をつけるのは正規表現を使わなくても出来ることですので。
guest

0

正規表現でなんとかするというより連想配列的なものを使うのがよいと思います。
(y_waiwaiさんの回答はそういうことをいわんとしている気もします)

北海道以外の都府県名に末尾をつけたものとつけないものをキーとして全部登録しておいて末尾を省略していないものを値として登録しておけばよいという感じでしょう。

無理に正規表現にしようとしても

if prefecture.match("青森|...") then return prefecutre+"県"
else if prefecture.match("東京") then return "東京都"
else if prefecutre.match("京都|大阪") thren return prefecutre + "府"
else return prefecutre

的なことになるだけでしょうから、冗長な気がします。

normalizedPrefecutre = prefectureMap[prefecture]

の方がシンプルですし多分早いんじゃないでしょうか。

投稿2018/03/15 03:50

KSwordOfHaste

総合スコア18394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問