我有一个使用Xamarin的Xamarin Forms应用程序。在平台上移动以获取当前位置,然后确定当前地址。地址以带换行符的字符串格式返回。
该地址可以如下所示:
111 Mandurah Tce
Mandurah WA 6210
Australia
或者
The Glades
222 Mandurah Tce
Mandurah WA 6210
Australia
我有这段代码可以将其分解为街道地址(包括电话号码),郊区,州和邮政编码(不是很优雅,但是可以用)
string[] lines = address.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
List<string> addyList = new List<string>(lines);
int count = addyList.Count;
string lineToSplit = addyList.ElementAt(count - 2);
string[] splitLine = lineToSplit.Split(null);
List<string> splitList = new List<string>(splitLine);
string streetAddress = addyList.ElementAt (count - 3).ToString ();
string postCode = splitList.ElementAt(2);
string state = splitList.ElementAt(1);
string suburb = splitList.ElementAt(0);
我想提取街道编号,在前面的示例中这很容易,但是考虑到该编号可能是Lot 111(只需要捕获111,而不是LOT字),这样做的最佳方法是什么? )或123A或8/123-有时还会返回类似111-113的信息
我知道我可以使用正则表达式查找所有可能的组合,但是在编写更多凌乱的代码之前,是否有一个优雅的内置类型解决方案(而且我知道上面的代码不是特别健壮)?
这些简单的正则表达式将说明多种类型的地址格式,但是您是否考虑了所有可能的变体,例如:
PO Box 123 suburb state post_code
Unit, Apt, Flat, Villa, Shop X Y street name
7C/94 ALISON ROAD RANDWICK NSW 2031
那仅仅是为了得到号码。您还必须处理所有可能的街道类型,例如车道,道路,地方,大街,大路。
然后是街道类型,例如:
12 Grand Ridge Road suburb_name
由于Ridge也是有效的街道类型,因此可以解释为street =“大岭(Grand Ridge)”和郊区=“ Road Melbourne_name”。
我在这方面做了很多工作,发现大量有效的地址模式意味着简单的正则表达式不能解决大量数据上的问题。
我最终将这个解析器开发为http://search.cpan.org/~kimryan/Lingua-EN-AddressParse-1.20/lib/Lingua/EN/AddressParse.pm来解决此问题。它最初是为澳大利亚地址写的,因此应该对您来说很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句