re.pattern による条件分岐

解決


のーす  2013-02-14 14:17:36  No: 143445  IP: [192.*.*.*]

お世話になります
正規表現を使って、文字列操作をしております。
例えば、住所文字列に神奈川なら関東、秋田なら東北,北海道なら北海道
とする条件判断をする場合
---
sAddress = "元の住所文字列"
sArea = [地域文字列]

 re.Pattern = "神奈川|..(その他関東エリア)"
 if re.test(sAddress) then
   sArea = "関東"
 else 
 re.pattern = "秋田|..(その他東北エリア)"
   if re.test(sAddress) then
     sArea = "東北"
   else
   re.pattern = "北海道"
     if re.test(sAddress) then
       sArea = "北海道"  
     end if
   end if
end if

とif の多重化になってしまいなんとなく気持ち悪いのですが、
if 〜  elseif 〜 endif のように綺麗にきまる書き方はありますか
(select case)でもかまいません

編集 削除
魔界の仮面弁士  2013-02-14 18:04:29  No: 143446  IP: [192.*.*.*]

このコードは VB.NET のものでは無さそうですね。VBS/VBA/VB6 等かな?

> 住所文字列に神奈川なら関東、秋田なら東北,北海道なら北海道
「東京都千代田区」という住所には、"京都"という文字列が含まれます。
「北海道北広島市」という住所には、"広島"という文字列が含まれます。

先頭一致にするとか、検索順を調整するなど、何かしらの対策を
打たないと、誤った分類になってしまうかもしれません。ご注意あれ。


> if の多重化になってしまいなんとなく気持ち悪いのですが、
私なら、
  キー:地域名
  値:正規表現
とした Dictionary を用意します。


'Set dict = CreateObject("Scripting.Dictionary")
Set dict = New Scripting.Dictionary

'都道府県を地方別のグループに定義しておく
dict.Add "関東", "神奈川県|埼玉県|千葉県"
dict.Add "東北", "秋田県|青森県|岩手県"
dict.Add "四国", "香川県|高知県|愛媛県"


--------
で、調査するときにはこんな感じ。
グループがどんなに増えても、If 文は一個で済みます。

sArea = ""
For Each vKey In dict
    re.Pattern = dict(vKey)
    If re.Test(sAddress) Then
        sArea = vKey
        Exit For
    End If
Next

編集 削除
のーす  2013-02-19 15:56:03  No: 143447  IP: [192.*.*.*]

弁士様、お世話になっております
Dictionaryですか、
いまいち使いどころがわからなかったのですが
こういう使い方があるのですね
ありがとうございました

編集 削除