Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将地址行拆分为两个字段的最佳方法_C#_.net_Import_Split_Street Address - Fatal编程技术网

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

C# 将地址行拆分为两个字段的最佳方法,c#,.net,import,split,street-address,C#,.net,Import,Split,Street Address,我们正在开发一个c#应用程序,将地址数据导入CRM系统。CSV文件包含一个地址列,如“Somethingstreet 34”。然而,我们的CRM对streetname和housenumber使用了两个不同的字段。当然,在给定的示例中,这没有问题。但我们的荷兰地址系统可能有点麻烦 现实世界的例子: Somestreet 88a(其中“Somestreet”是街道名称,88a是门牌号) 2e van Blankenburgstraat 123a(其中“2e van Blankenburgstraa

我们正在开发一个c#应用程序,将地址数据导入CRM系统。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”是门牌号)
  • 阿波罗11号(其中“阿波罗11号”是街道,“11号”(第二个)是门牌号)
  • Charta 77 Vaart 159 3H(其中“Charta 77 Vaart”是街道名称,“159 3H”是门牌号)
  • Charta 77 Vaart 44/2(其中“Charta 77 Vaart”是街道名称,“44/2”是门牌号)

我所做的,但我怀疑最有效的解决方案是将地址反转,然后获取第一部分,直到找到一个数字并全部获取。i、 e.反向地址上的正则表达式
*\d+

当街道包含一个数字时,这就解决了您的问题。

我所做的,但我怀疑它是否是最有效的解决方案,即反转地址,然后获取第一部分,直到找到一个数字并全部获取。i、 e.反向地址上的正则表达式
*\d+

这就解决了街道包含数字时的问题。

您可以在空格上拆分,然后检查某个内部字符串的第一个字符是否为整数吗

char[]splits=新字符[1];
拆分[0]='';
string[]split=addressLine.split(拆分);
int splitLoc=-1,i;
对于(i=1;i

取决于“clean”的含义,但如果所有地址都可以按您指定的方式形成,它看起来确实会起作用。

您可以在空格上进行拆分,然后检查某个内部字符串的第一个字符是否为整数吗

char[]splits=新字符[1];
拆分[0]='';
string[]split=addressLine.split(拆分);
int splitLoc=-1,i;
对于(i=1;i

取决于“clean”的含义,但如果所有地址都可以按您指定的方式形成,那么这看起来确实可行。

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

确保数据正确性的最佳解决方案是将现有数据库与具有此功能的已知地址api进行比较。否则,您只是给出了最佳猜测,如果不是全部的话,也应该手动查看部分数据。

有太多不同的方法可以输入这些数据。我经常将我的地址写为:

富街123号3号公寓

街道两头都有房子和公寓的号码

如果这是我的问题,我会编写一个正则表达式来处理“简单”的正则表达式,并将复杂的正则表达式标记出来供人查看


有太多不同的方法可以输入这些数据。我经常将我的地址写为:

富街123号3号公寓

街道两头都有房子和公寓的号码

如果这是我的问题,我会编写一个正则表达式来处理“简单”的正则表达式,并将复杂的正则表达式标记出来供人查看


这似乎不是严格意义上的编程问题,而是一个数据分析问题。因为我还没有看到DataOverflow.com,这个问题要求使用正则表达式和notes C作为语言。。。这似乎比这里提出的许多问题更具体。什么是荷兰语寻址系统(它总是一种选择)?我添加了一些额外的例子,这似乎不是严格意义上的编程问题
 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] + " ";
 }