【发布时间】:2017-11-06 20:39:30
【问题描述】:
我试图从格式不正确的地址列表中获取街道、城市、州和邮政编码,除了“街道”之外的所有内容都是可选的。 (我可以有街道、街道+城市、街道+城市+州、街道+城市+州+邮编)。分隔符可以是逗号 + 空格,也可以是仅空格。
到目前为止,我已经
^(?<STREET>.*?)(?<SEPARATOR1>(?: *-{1,2} *)|(?:, ?))(?<CITY>[a-z-' ]*)?((?<SEPARATOR2>(?: )|(?:, ))(?<STATE>AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY))?((?<SEPARATOR3>(?: )|(?:, ))(?<ZIP>[0-9]{5}(-[0-9]{4})?))?
如果仅用空格隔开,我在 CITY 捕获后无法获取捕获。
测试数据:
123 Ave Ave - Hoquiam WA 98103
123 Ave Ave - Hoquiam, WA 98103
123 Ave Ave - Hoquiam, WA 98103-1345
123 Ave Ave - Hoquiam
123 Ave Ave - Ocean Shores WA
123 Ave Ave - Ocean Shores, WA
123 Ave Ave - D'ile, WA
123 Ave Ave
我做错了什么?
【问题讨论】:
-
如果你的城市或街道名称中有
New York这样的空格,逻辑是什么? -
状态只有 2 个字符。总是
-
抱歉,我应该在城市中指定
New York。问题在于space only分隔符。如果它是逗号空间,这不是一个真正的问题。 -
另外,您使用的是什么语言?所以我们知道正则表达式的风格。
-
@jsgoupil
A[LKSZR]|C[AOT]|D[EC]|F[ML]|G[AU]|HI|I[DL]|I[NA]|K[SY]|LA|M[EHDAINSOT]|N[EVHJMYCD]|MP|O[HKR]|P[WAR]|RI|S[CD]|T[NX]|UT|V[TIA]|W[AVIY]更短,或者按照 Jan 的回答建议使用[A-Z]{2}。此外,您可能会遇到第一个分隔符的问题。\ *-{1-2}\ *会匹配-,可以匹配,比如some-thing
标签: regex regex-greedy