0

データベースには、完全な住所をテキストとして保存する「住所」フィールドが 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+)

ご協力いただきありがとうございます!

4

3 に答える 3

1

これは広すぎるかもしれませんが、使用している正規表現の実装によってはうまくいくかもしれません:

(.+?),\s*(.+?)(?:,\s|\s\s)(.+?)\s(\d{5})

これにより、例から次のグループが返されます。

('1977 S. Joshua Tree PL', 'Palm Springs', 'CA', '92264')
于 2013-07-01T19:02:58.777 に答える
1

個人的には、まったく別のアプローチを取ると思います。郵便番号は、利用可能な最も詳細なデータであるため、信頼できるものとして扱います。郵便番号から都市へのマッピングのリストを取得します。住所の郵便番号部分を抽出します。新しいデータベース フィールドに、郵便番号に基づいて都市と州の値を書き込みます。次に、各データ エントリを調べて、郵便番号に基づく都市名と州名が文字列に含まれているかどうかを判断するスクリプトを作成します。可能であれば、それらの値を文字列から削除します。そして、そのレコードが正常に処理されたことを示すフラグを立てます。彼らがレコードにフラグを立てられない場合は、手動レビューを実行する必要がある可能性があります。

別の代替アプローチとして、Google マップなどの API を使用して、アドレス文字列を に送信し、できればクリーンなアドレスを取得することもできます。

于 2013-07-01T18:50:02.637 に答える
-1

私は常に、このようなものには名前付きキャプチャ グループを好みます。だから試してみてください

(?<addr>[^,]+),\s+(?<city>[^,]+),\s+(?<state>[A-Za-z]{2})\s+(?<zip>\d{5}(-\d{4})?)

あなたの例を解析すると、これが得られます

  • addr: 1997 S. Joshua Tree PL
  • 都市: パーム スプリングス
  • 州: CA
  • 郵便番号: 92264

また、拡張郵便番号形式のサポートも追加しました。

この正規表現によって生成された一致から都市グループの値を抽出するだけです。

于 2013-07-01T19:09:06.130 に答える