- - PR -
住所の正規表現
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-10-25 22:03
つまり、やりたいことは、住所文字列を複数行で印字する際に、
"-"区切りで表現された部分の途中で改行(折り返し)されてしまわないように 禁則処理をしたい、ということだったんですね。 #住所の中で、丁目と番、号や番地、場合によってはマンションの号室などは #"-"区切りで表現されることがありますが、途中で改行されてしまうと #配送する人が見間違えてしまうから、ってとこですかね。
ただ、元データが分かれてくるなら、一つの文字列にくっつける前に 文字数を見て、番地の前なり、アパート名の前に改行を入れればよいような気もしますが。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2008-10-25 22:07 ] | ||||||||||||||||||||
|
投稿日時: 2008-10-26 03:11
経過報告です。
Regex regex = new System.Text.RegularExpressions.Regex(@"-[0-90-9]{1,4}|‐[0-90-9]{1,4}|−[0-90-9]{1,4}|―[0-90-9]{1,4}|ー[0-90-9]{1,4}"); MatchCollection mc = regex.Matches(data); よねKENさんに教えていただいた方法で、ハイフン(全半角)&マイナス(全半角)&長音&ダッシュの判別できました。 >ただ、元データが分かれてくるなら、一つの文字列にくっつける前に 文字数を見て、番地の前なり、アパート名の前に改行を入れればよいような気もしますが。 ここが微妙にややこしいのですが(先程の仕様に明記してませんでした)、なるべく全て表示させる為、全文字列データに対して印字時の幅を求めます。足りなければ、1引いたフォントサイズと、固定フォントサイズまで縮小します。それでもオーバーしてしまうのは、もう知らない(カット)と言う仕様です。ただ、おっしゃるように教えていただいた部分は結合してすぐに改行挿入します。 また、データによっては、都道府県+市町村+番地+アパート名が結合されてくる場合もあります。その場合はもうしょうがないですね、番地部で改行しても。番地部を優先させる事(改行されないように番地末尾から遡って文字列幅計算)も可能ですが、都道府県・市町村で改行が急に入る方が違和感がありますね。 また、ゆむさんのおっしゃるように県市町村データはほぼ固定で、そのようなツールを使うことも可能ですが、このアプリ自体が別アプリの中間アプリの位置付けです。大元のデータは別会社のアプリ上で作られたものです。来た物を正と考えたいと思ってます。(そもそもユーザ登録で厳密にやるべき事と思うんですがね・・、DBのデータの整合性は保たれているのか・・。都道府県だけ固定ですが、他入力が全てがゆるすぎる気がします。) 愚痴っぽくなってしまいましたが、ご親切にありがとうございました。 本当に助かりました。 [ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-26 03:12 ] | ||||||||||||||||||||
|
投稿日時: 2008-10-26 13:54
正規表現部分は、
や
というふうにまとめて書けます。 正規表現でどんな風に記述できるのかは以下のURLを一通り目を通しておくことをお勧めします。 http://msdn.microsoft.com/ja-jp/library/az24scfc(VS.80).aspx
以前の投稿でコード例を示しましたが
こういう住所の場合(マンション名の最後がー(長音記号))は期待する結果には なりませんので、その点は仕方ないものとするのか、判断してくださいね。 これを仕方ないものとする場合、制限事項として挙げておかないと テスト時に不具合として返ってきますよ。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2008-10-26 13:55 ] | ||||||||||||||||||||
|
投稿日時: 2008-10-27 23:09
通りすがりですが
・全国には最大で41丁目があります。(帯広市の南41丁目) ・1の町 という地名があったりします(漢数字ではなくローマ数字の1が正しいようです) |