将地址行拆分为两个字段的最佳方法

时间:2009-06-29 17:35:29

标签: c# .net import split street-address

我们正在开发一个将地址数据导入CRM系统的c#应用程序。 CSV文件包含类似“Somethingstreet 34”的地址列。然而,我们的CRM使用两个不同的字段作为streetname和housenumber 。当然,在给定的例子中,这没有问题。但是我们的荷兰语寻址系统可能会有点痛苦。

真实世界的例子:

  • Somestreet 88a(其中'Somestreet'是街道名称,88a是房子号码)
  • 2e van Blankenburgstraat 123a(其中'2e van Blankenburgstraat'是街道名称,'123a'是房屋号码)
  • 2e van Blankenburgstraat 123-a(其中'2e van Blankenburgstraat'是街道名称,'123-a'是房屋号码)
  • 2e van Blankenburgstraat 123 a(其中'2e van Blankenburgstraat'是街道名称,'123 a'是房屋号码)

现在我正在寻找一个很好的函数(RegEx或其他东西),将这些地址线正确地分成两个字段。有一个很好的干净方法吗?


修改

我对我们的寻址系统做了一些进一步的调查,似乎(谢谢政府)上面的例子甚至都不是“最差”的。

更多(这些是真实的街道和数字):

  • Rivium 1e Straat 53 / ET6(其中'Rivium 1e Straat'是街道,'53 / ET6'是房屋号码)
  • Plein 1940-1945 34(其中'Plein 1940-1945'是街道,'34'是房子号)
  • Apollo 11-Laan 11(其中'Apollo 11-Laan'是街道,'11'(第二个)是房子号码)
  • Charta 77 Vaart 159 3H(其中'Charta 77 Vaart'是街道名称,'159 3H'是房屋号码)
  • Charta 77 Vaart 44/2(其中'Charta 77 Vaart'是街道名称,'44 / 2'是房屋号码)

4 个答案:

答案 0 :(得分:1)

数据正确性的最佳解决方案是将现有数据库与已知地址api进行比较,该地址具有为您执行此操作的功能。否则,您只是给出最佳猜测,并且应该手动审查一些(如果不是全部)数据。

答案 1 :(得分:0)

我做了什么,但我怀疑这是最高效的解决方案是扭转地址,然后获得第一部分,直到找到一个数字并将它们全部拿走。即反转地址上的正则表达式.*\d+。 当街道包含数字时,这可以解决您的问题。

答案 2 :(得分:0)

你可以做一些拆分空格的事情,然后检查一些内部字符串的第一个字符是否是整数?

 char[] splits = new char[1];
 splits[0] = ' ';
 string[] split = addressLine.split(splits);
 int splitLoc = -1, i;
 for (i =1; i < split.Length; i++){//start at 1 to avoid the first '2e' streets
     int theFirstDigit = -1;
     try{
        theFirstDigit = int.Parse(split[i].Substring(0,1));
     }catch {
        //ignore; parse fails with an exception
     }
     if (theFirstDigit != -1){
         splitLoc = i;
         break;
     }
 }
 if (splitLoc < 0) return; //busted
 string field1, field2;
 for (i = 0; i < splitLoc; i++){
     field1+= split[i] + " ";
 }

 for (i = splitLoc; i < split.Length; i++){
     field2+= split[i] + " ";
 }

取决于'干净'的含义,但如果可以按照您指定的方式形成所有地址,它看起来确实有效。

答案 3 :(得分:0)

有人可以输入这些数据的方式太多了。我经常把我的地址写成:

123 Foo Street Apt#3

即街道名称两端的房屋和公寓号码

如果这是我的问题,我会编写一个处理“简单”的正则表达式并标记复杂的正则表达式。

You can find a list of street names in the US from the Census Bureau but it is buried inside a monster datafile