【问题标题】:Convert street address from string to columns - Regex?将街道地址从字符串转换为列 - 正则表达式?
【发布时间】:2010-10-13 01:11:32
【问题描述】:

我在一个单列 Excel 文件中有一个包含 350 个地址的列表,我需要将其导入 SQL 表,将数据分成列。

Excel单元格的内容是这样的

Courtesy Motors 2520 Cohasset Rd - Chico, CA 95973-1307 530-893-1300

我应该采用什么策略以干净的方式导入它?

我在想

NAME

街道地址

STATE

电话

ZIP

如果这很重要,我在 C# 工作。

RegEx 是合适的方法吗?我对他们不太熟悉,所以我不确定。有人可以建议一个可以完成工作(或部分工作)的正则表达式吗?

谢谢!

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    以下正则表达式应提取捕获组中的每个部分:

    (\D+) ([^-]+) - ([^,]+, \w+) ([\d-]+) ([\d-]+)
    

    按顺序捕获组:

    1. 姓名
    2. 街道地址
    3. 城市,州
    4. 邮编
    5. 电话

    【讨论】:

    • OP 没有指定城市,只是指定州。
    • 对,杰森;但是将捕获调整为仅获取状态应该相当简单。我想我会提供一个可以调整的更通用的正则表达式。
    【解决方案2】:

    正则表达式是这项工作的工具。我不是 C# 开发人员,所以我不能给你确切的代码。尽管如此,以下正则表达式应该可以工作。大多数 IDE 都内置了此功能,或者如果您可以访问 UNIX,sed 也可以。

    ([^\d]+)\s(.+?)\s-\s[^,]+,\s([A-Z]{2})\s([^\s]+)\s([^\s]+)
    

    捕获:

    1. 姓名
    2. 地址
    3. 状态
    4. 邮编
    5. 电话

    【讨论】:

    • [^\d] 写成\D 要简单得多。
    • @Amber,一些正则表达式实现不支持否定组。
    • @Amber,公平的。有 100 种编写正则表达式的方法,这就是美丽和诅咒。
    【解决方案3】:

    您可以使用谷歌地理编码 API。您可能必须从那里删除电话号码,但如果有人正在寻找比正则表达式更多功能的地址解析 - 他们甚至可以获得地址的纬度/经度。

    为您的地址示例

    http://maps.googleapis.com/maps/api/geocode/xml?address=2520%20Cohasset%20Rd%20-%20Chico%2C%20CA%2095973-1307%20530-893-1300%20%20&sensor=false

    文档

    https://developers.google.com/maps/documentation/geocoding/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多