【问题标题】:MYSQL Find Value in Table that Matches Best of Multiple Possible Sub Strings of a StringMYSQL 在表中查找与字符串的多个可能子字符串中的最佳匹配的值
【发布时间】:2016-06-21 20:53:39
【问题描述】:

我有一张包含佛罗里达州所有市镇的表格。与许多州一样,我们的城市具有相同的根名称,但由方向唯一标识。例如,我们有一个城市叫“棕榈滩”,而我们有一个完全不同的城市叫“西棕榈滩”。

我从 .xls 文件中提取了一个字符串,如下所示:

3333 10TH ST., N. #201, WEST PALM BEACH, FL 34103

我想将字符串分成两段,段#2 应该以 WEST PALM BEACH 开头。因为如果我可以识别城市,那么将段#2 拆分为 CITY/STATE/ZIPCODE 将很容易。

我(意思是 PHP)真的不知道这个字符串中的城市出现在哪里(这是我的问题的一部分,因为字符串段因字符串而异——有些有逗号,有些没有逗号,所以我不能真正依靠逗号分隔来识别子字符串段)。

例如,电子表格可能很容易有如下所示的一行:

3333 10TH ST., N. #201, WEST PALM BEACH FL 34103(注意缺少逗号)。

这就是我要搜索表以匹配城市子字符串的原因,因为我不能相信逗号分隔或空格分隔字符串的结果会得到子字符串的最后三个部分,即 CITY STATE ZIP。

我需要从表中明确匹配 WEST PALM BEACH,而不是 PALM BEACH。

如何使用我的城市名称表来确定字符串中的城市是“WEST PALM BEACH”而不是“PALM BEACH”?

【问题讨论】:

  • 邮政编码总是最后一个值吗?我会查一下城市名称。
  • @chris85 邮政编码始终是字符串的最后一部分。我可以使用邮政编码查找,但这会打开一大堆蠕虫!邮政编码查找历来处于不断变化的状态。但这个建议有很强的价值。我要去研究一下,这可能是一个解决方案。
  • @chris85 好吧,邮政编码查找可能就是这里的答案。
  • 或者……城市和州之间只是缺少逗号吗?可能的正则表达式方法,regex101.com/r/jK7sM3/1。如果这些是唯一的偏差。
  • @chris85 我有 25,000 条记录,地址输入字段的方式不可靠。有些用逗号分隔城市和州,有些则没有。所以我必须找到一种可靠的方法来挑选最后三个部分:城市州邮政编码。我想我应该搜索城市子字符串,但多亏了你,我下载了带有城市和县的邮政编码查找。邮政编码总是最后一段,我认为这是解决方案。

标签: php mysql sql


【解决方案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})?)$

应该与城市、州和邮政编码匹配。

演示2:https://regex101.com/r/jK7sM3/1

【讨论】:

  • 正在研究正则表达式示例,但同时使用邮政编码查找。幸运的是,免费的邮政编码/城市/县表是免费提供的。
猜你喜欢
  • 2015-10-03
  • 2016-07-01
  • 1970-01-01
  • 2020-04-12
  • 2019-03-10
  • 2019-06-26
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
相关资源
最近更新 更多