在我们的数据库中,我们有 1 个“地址”字段,将完整地址存储为文本。我正在将地址拆分为以下字段:Line1、City、State、Zip。(美国地址)。我对解析 state 和 zip 有很好的表达,但我在解析 city 时遇到了一些困难。
基本上,我使用以下规则来解析城市:
- 它必须出现在状态之前
- 它前面可以有一个逗号,也可以有两个或多个空格。
- 如果以上都不是真的,那么只返回状态之前的 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 |威|怀)))
尝试使第一个单词成为可选会导致表达式仅返回“Springs”,而不是“Palm Springs”,这在上面的表达式中绝对匹配:.*(?i)(?((((,\s|\s) {2,})\w+) ? (\s\w+)))(?=(,\s+|\s+)
谢谢你的帮助!