データベースには、完全な住所をテキストとして保存する「住所」フィールドが 1 つあります。住所を次のフィールドに分割しています: Line1、City、State、Zip。(米国の住所)。州と郵便番号を解析するための適切な式がありますが、都市を解析するのに少し苦労しています。
基本的に、都市の解析には次のルールを使用しています。
- 状態の直前に来なければならない
- カンマ、またはその前に 2 つ以上のスペースを含めることができます。
- 上記のどちらにも当てはまらない場合は、状態の前にある 1 つの単語を返します。
これらのアドレスの検証には興味がありません。
これは私が取り組んできたRegExの例で、コンマまたは2つ以上のスペースで区切られたアドレスコンポーネントの解析にはうまく機能しますが、代替を含めようとすると機能しません先行する 1 語:
サンプル住所: 1977 S. Joshua Tree PL, Palm Springs, CA 92264
.*(?i)(?((((,\s|\s{2,})\w+)+(\s\w+)))(?=(,\s+|\s+)(アラバマ|アラスカ|アリゾナ|アーカンソー|カリフォルニア|コロラド|コネチカット|デラウェア|フロリダ|ジョージア|ハワイ|アイダホ|イリノイ|インディアナ|アイオワ|カンザス|ケンタッキー|ルイジアナ|メイン|メリーランド|マサチューセッツ|ミシガン|ミネソタ|ミシシッピ|ミズーリ|モンタナ|ネブラスカ|ネバダ|ニューハンプシャー|ニュージャージー|ニューメキシコ|ニューヨーク|ノースカロライナ|ノースダコタ|オハイオ|オクラホマ|オレゴン|ペンシルベニア|ロードアイランド|サウスカロライナ|サウスダコタ|テネシー|テキサス|ユタ|バーモント|バージニア|ワシントン|ウェストバージニア|ウィスコンシン|AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN |MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV |WI|WY)))
最初の単語をオプションにしようとすると、式は "Palm Springs" ではなく "Springs" のみを返します。これは上記の式で確実に一致します: .*(?i)(?((((,\s|\s {2,})\w+) ? (\s\w+)))(?=(,\s+|\s+)
ご協力いただきありがとうございます!