我们正在开发一个将地址数据导入CRM系统的c#应用程序。 CSV文件包含类似“Somethingstreet 34”的地址列。然而,我们的CRM使用两个不同的字段作为streetname和housenumber 。当然,在给定的例子中,这没有问题。但是我们的荷兰语寻址系统可能会有点痛苦。
真实世界的例子:
现在我正在寻找一个很好的函数(RegEx或其他东西),将这些地址线正确地分成两个字段。有一个很好的干净方法吗?
修改
我对我们的寻址系统做了一些进一步的调查,似乎(谢谢政府)上面的例子甚至都不是“最差”的。
更多(这些是真实的街道和数字):
答案 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
即街道名称两端的房屋和公寓号码
如果这是我的问题,我会编写一个处理“简单”的正则表达式并标记复杂的正则表达式。