将街道地址从字符串转换为列 - 正则表达式?

时间:2010-10-13 01:11:33

标签: c# regex

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

Excel单元格的内容就是这样的

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

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

我在想

NAME< - 第一位数字之前的任何内容

STREET ADDRESS< - 从第1位到' - '

STATE< - 从最后一个','到' - '之前的任何内容(地址字段可以包含一些 - )

TELEPHONE< - Last 12 char

ZIP< - 最后22个字符的第一个字符

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

按顺序捕获组:

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

答案 1 :(得分:1)

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

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

捕获:

  1. 名称
  2. 地址
  3. 国家
  4. ZIP
  5. 电话

答案 2 :(得分:0)

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

您的地址示例

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/