web-dev-qa-db-ja.com

正規表現の住所の一致

住所との一致が完全になることは決してないことはわかっていますが、ほとんどの場合に近くなる2つの正規表現ステートメントを作成しようとしています。

住所を強調表示しようとしています。私は正規表現を吸うと近づこうとしましたが、これをより良くする方法を誰かが理解するのを手伝ってくれませんか?

ストリング:

午前6時〜午後11時、パルマソラエレメンタリー、6806フィフスアベニューノースウェスト、ブレーデントン、フロリダ州34209

正規表現1:

/\s +(\ d {2,5}\s +)(?![a | p] m\b)(([a-zA-Z |\s +] {1,5}){1,2}) ?([\ s | \、|。] +)?(([a-zA-Z |\s +] {1,30}){1,4})(court | ct | street | st | drive | dr |車線| ln |道路| rd | blvd)([\ s | \、|。| \;] +)?(([a-zA-Z |\s +] {1,30}){1,2} )([\ s | \、|。] +)?\ b(AK | AL | AR | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | ID | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | OK | OR | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY)([\ s | \、|。] +)?(\ s +\d {5})?([\ s | \、|。] +)/ i

(時々、通りと都市だけがあり、州または郵便番号がない)

正規表現2:

/\b(\ d {2,5}\s +)(?![a | p] m\b)(NW | NE | SW | SE | north | south | west | east | n | e | s | w )?([\ s | \、|。] +)?(([a-zA-Z |\s +] {1,30}){1,4})(court | ct | street | st | drive | dr |レーン| ln |道路| rd | blvd)/ i

それをいじる: http://jsfiddle.net/isuelt/rMC6P/11/

19
isuelt

米国の住所は通常の言語ではないため、正規表現を使用して照合することはできません。これらはいくつかの孤立した場合に役立ちますが、一般に、特にそのような入力に対しては失敗します。

以前は住所確認会社で働いていました。あなたの質問への回答として、テキストの文字列で「住所を強調表示」するには、抽出ユーティリティを試すことをお勧めします。いくつかありますが、見回すことをお勧めしますが、ここにours質問からの入力を使用します- -ご覧のとおり、アドレスを見つけて検証しました。

LiveAddress extraction example

APIエンドポイントは、各アドレスの開始位置と終了位置、および各アドレスに関する豊富な情報を含むJSONを返します。 (上の画像の下部にあるCSV出力を参照してください。)

あなたが試したそれらの正規表現を勇気づけてくれたことを賞賛します!うまくいけば、これは役に立ちます。

32
Matt

私は次のようなアドレスに対して同様のことをする必要がありました

800 SE 20アベニュー#603、ディアフィールドビーチ

9801 NW 3 STREET APT 5、PLANTATION

11909 GLENMORE DRIVE#4-1、コーラルスプリング

これは私が使った正規表現です

\s*([0-9]*)\s((NW|SW|SE|NE|S|N|E|W))?(.*)((NW|SW|SE|NE|S|N|E|W))?((#|APT|BSMT|BLDG|DEPT|FL|FRNT|HNGR|KEY|LBBY|LOT|LOWR|OFC|PH|PIER|REAR|RM|SIDE|SLIP|SPC|STOP|STE|TRLR|UNIT|UPPR|\,)[^,]*)(\,)([\s\w]*)\n

アドレスの各部分に対して個別のグループを返します(私の場合、州名を解析する必要はありませんでした)。ここで試してみてください https://regex101.com/r/OsvOxn/

2
nimatra

マットは正しいです。正規表現の解析が非常に正確になることは決してありません。この危険な道を進むと、必然的に妥当な数の誤検知と誤検知が発生します。ただし、それで問題ない場合は、実際には2つの正規表現の組み合わせを使用します。1つはストリート名ベースのスキーム用で、もう1つはシティグリッドスキーム用です。

ストリートネームシステム:

/\b\d{1,6} +.{2,25}\b(avenue|ave|court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|plaza|parkway|pkwy)[.,]?(.{0,25} +\b\d{5}\b)?/ig

グリッドシステム

/(\b( +)?\d{1,6} +(north|east|south|west|n|e|s|w)[,.]?){2}(.{0,25} +\b\d{5}\b)?\b/ig

また、住所に都道府県と郵便番号がない場合は、ストリートモニカの後に続くテキストの抽出を基本的に忘れることができます。

1
Scottmas