【发布时间】:2014-07-18 11:56:36
【问题描述】:
我一直在使用NSDataDetector 来解析字符串中的地址,并且在大多数情况下它做得很好。但是在与此类似的地址上,它不会检测到它。
6200 North Evan Blvd Suit 487 Highland UT 84043
目前我正在使用此代码:
NSError *error = nil;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress error:&error];
NSArray *matches = [detector matchesInString:output options:0 range:NSMakeRange(0, [output length])];
for (NSTextCheckingResult *match in matches) {
if ([match resultType] == NSTextCheckingTypeAddress) {
_address = [_tesseractData substringWithRange:[match range]];
NSDictionary *data = [match addressComponents];
_zip = [data objectForKey:@"ZIP"];
if (_zip) {
NSRange zipRange = [_tesseractData rangeOfString:_zip];
if (zipRange.location != NSNotFound) {
[_tesseractData deleteCharactersInRange:zipRange];
}
}
_city = [data objectForKey:@"City"];
if (_city) {
NSRange cityRange = [_tesseractData rangeOfString:[_city uppercaseString]];
if (cityRange.location != NSNotFound) {
[_tesseractData deleteCharactersInRange:cityRange];
}
}
_city = [_city capitalizedString];
_state = [data objectForKey:@"State"];
_street = [data objectForKey:@"Street"];
if (_street) {
NSRange streetRange = [_tesseractData rangeOfString:[_street uppercaseString]];
if (streetRange.location != NSNotFound) {
[_tesseractData deleteCharactersInRange:streetRange];
}
}
_street = [_street capitalizedString];
}
}
谁能建议一种更强大的方法来从字符串中解析出物理地址?我需要能够获取 Zip、Street、State 和 City。
【问题讨论】:
-
您可以尝试使用正则表达式,但这可能会很困难,因为地址以许多不同的格式出现。另一种选择可能是 Web 服务,例如 this answer 中描述的服务
标签: ios objective-c nsdatadetector