【问题标题】:Regex optional everything separated by space or comma (city, state)正则表达式可选所有内容,以空格或逗号分隔(城市、州)
【发布时间】: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

我做错了什么?

https://regex101.com/r/v476Gx/1

【问题讨论】:

  • 如果你的城市或街道名称中有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


【解决方案1】:

经过一些调整,以下更新的正则表达式应该适合您:

^(?<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})?))?)?$

Updated RegEx Demo

【讨论】:

    【解决方案2】:

    虽然您有答案,但这可能更具可读性/可维护性:

    ^
    (?P<street>[^-\n]+)
    (?:-\h*)?
    (?P<town>(?:(?!\b[A-Z]{2}\b).)*)
    (?P<state>\b[A-Z]{2}\b)?\h*
    (?P<zip>[-\d]*)
    $
    

    a demo o nregex101.com。它只是需要在城镇部分进行一些清洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多