我在佛罗里达州的所有市镇都有一张桌子。与许多州一样,我们的城市具有相同的根名称,但是由方向唯一标识。例如,我们有一个名为" Palm Beach"我们有一个完全不同的城市叫做#34;西棕榈滩"。
我从.xls文件中提取了一个字符串,如下所示:
3333 10th ST。,N。#201,WEST PALM BEACH,FL 34103
我想将字符串拆分为两个段,而段#2应该以WEST PALM BEACH开头。因为如果我可以识别这个城市,那么很容易将第2段拆分成CITY / STATE / ZIPCODE。
我(意思是PHP)并不真正知道这个字符串在这个字符串中的位置(这是我的问题的一部分,因为字符串段不同于字符串 - 一些有逗号,另一些没有&#39 ;有逗号,所以我不能真正依赖逗号分隔来识别子串段。)
例如,电子表格可能很容易有一条如下所示的行:
3333 10th ST。,N。#201,WEST PALM BEACH FL 34103 (注意缺少逗号)。
这就是为什么我要搜索一个表来匹配一个城市子字符串,因为我不能信任逗号分隔或空格分隔字符串的结果来获取子字符串的最后三个部分CITY STATE ZIP。
我需要明确地匹配WEST PALM BEACH而不是PALM BEACH。
如何使用我的市政名称表来确定字符串中的城市是" WEST PALM BEACH"而不是" PALM BEACH"?
答案 0 :(得分:1)
由于数据是非规范化的,我只需从字符串的末尾拉出邮政编码,然后查看。您可以使用正则表达式从字符串的末尾拉取邮政编码:
/(\d{5}(?:-d{4})?)$/
正则表达式演示:https://regex101.com/r/jK7sM3/2(如果拉链总是美国,国际拉链结构会有所不同; https://en.wikipedia.org/wiki/List_of_postal_codes)
或者,如果地址的街道部分始终以逗号结尾,则可以使用:
\h([A-Z ]+)[,\h]+([A-Z]{2})\h+(\d{5}(?:-d{4})?)$
哪个应与城市,州和邮政编码相匹配。