首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用NSDataDetector解析来自NSString的地址

不使用NSDataDetector解析来自NSString的地址
EN

Stack Overflow用户
提问于 2014-05-29 12:05:30
回答 2查看 1.1K关注 0票数 6

我一直在使用NSDataDetector从字符串中解析出地址,大多数情况下它都做得很好。然而,在类似于这个地址的地址上,它没有检测到它。

6200 North Evan Blvd Suit 487 Highland UT 84043

目前,我正在使用以下代码:

代码语言:javascript
复制
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];

    }
}

有没有人能推荐一种更健壮的方法来从字符串中解析出物理地址?我需要能够得到邮政编码,街道,州和城市。

EN

回答 2

Stack Overflow用户

发布于 2014-06-04 10:21:37

NSDataDetector是一个NSRegularExpression子类,所以也许你可以创建一个定制的实例,并从检查苹果把什么作为patternoptions参数开始。

大致是这样的:

代码语言:javascript
复制
NSDataDetector * dataDetectorRegEx = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress error:&error];
NSString * dataDetectorPattern = dataDetectorRegEx.pattern;
NSLog(@"Check out this pattern!: %@", dataDetectorPattern);

// Customize the pattern for your special cases
NSString * customPattern = [NSString stringWithFormat:@"<MY_OTHER_PATERNS + %@>", dataDetectorPattern];
NSRegularExpression * customDataDetectorLikeRegEx = [NSRegularExpression regularExpressionWithPattern:customPattern options:someOptions error:&error];
票数 2
EN

Stack Overflow用户

发布于 2014-06-02 08:22:47

您可以尝试使用正则表达式(RegEx)解析地址信息,我认为这是更健壮的方法。请参阅以下使用RegEx的参考:Making RegEx Easy in Objective-C,Objective-C RegEx Categories可在GitHub上找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23925527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档