検証済みの住所を基本コンポーネント (ユニット番号、ストリート番号、ストリート名など) に分割しようとしています。これを行うには、文字列を逆方向 (右から左) に処理します。
- [AZ'-] 文字に一致 => 通りの名前
- [\d-]+[A-Za-z]{0,1} に一致 => 番地 (これは 10-12 または 11B などに一致し、0 または 1 文字のみになります)
- 文字列の残りをユニット番号に一致させます
これで、このマッチングを行う 3 つの正規表現パターンを記述できるようになりました。私が確信していないのは、それらをどのように使用するかです。これは、アドレスのバッチ処理で使用されます。
私のアイデアは次のとおりです。
- アドレスに対して各パターンを実行し、各一致を適切なアドレス オブジェクト プロパティに保存します。
- 各ステップの後に文字列を短縮するためのある種の一致/置換 (私は先読みと振り返りを使用するつもりでした)
正規表現を最も効率的に使用する方法についてのアドバイスが最も役立ちます。
EDIT 示唆されているように、代わりにグループを使用してこれを行いました。誰かが私が思いついたものを見たい場合:
(?<unit>(.*))\s(?<number>([\d-]+[A-Za-z]{0,1}))\s+(?<name>([\sA-Za-z'-]+$))
注意:これは、私が必要とするものに固有の、非常に特殊な形式のアドレス用です。