在NSString中找到第一个字母并向后计数

时间:2012-12-20 16:34:08

标签: ios parsing nsstring nsscanner

我是IOS的新手,正在寻找一些指导。

我有一个很长的NSString,我正在解析。开头可能有几个垃圾字符(可以是任何非字母字符),然后是11个数字或空格,然后是一个字母(A-Z)。我需要获取字母的位置,并将字母后面的11个字符的子字符串转换为字母后面的1个字符。

有人可以就如何做到这一点给我一些指导吗?

示例:'!!2553072 C'

我希望:'53072 '

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式模式完成此操作:(.{11})\b[A-Z]\b

(.{11})将抓取任意11个字符,\b[A-Z]\b将在字边界上查找单个字符,这意味着它将被空格或字符串末尾包围。如果字符可以跟随示例中的C,则删除最后一个\b。这可以在Objective-C中完成,如下所示:

NSError *error;
NSString *example = @"!!2553072      C";
NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:@"(.{11})\\b[A-Z]\\b"
                              options:NSRegularExpressionCaseInsensitive
                              error:&error];

if(!regex)
{
    //handle error
}

NSTextCheckingResult *match = [regex firstMatchInString:example
                                                options:0
                                                  range:NSMakeRange(0, [example length])];
if(match)
{
    NSLog(@"match: %@", [example substringWithRange:[match rangeAtIndex:1]]);
}

答案 1 :(得分:1)

您可以使用NSCharacterSet来拆分字符串,然后取出第一个剩余的组件(由垃圾和数字组成)并获取其子字符串。例如(未编译,未测试):

- (NSString *)parseString:(NSString *)myString {
    NSCharacterSet *letters = [NSCharacterSet letterCharacterSet];
    NSArray *components = [myString componentsSeparatedByCharactersInSet:letters];
    assert(components.count > 0);
    NSString *prefix = components[0]; // assuming relatively new Xcode
    return [prefix substringFromIndex:(prefix.length - 11)];
}

答案 2 :(得分:1)

可能有更优雅的方式来执行涉及正则表达式或一些Objective-C魔法,但这是一个简单的解决方案(亲自测试)。

-(NSString *)getStringContent:(NSString *)input
{
    NSString *substr = nil;
    NSRange singleLetter = [input rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]];
    if(singleLetter.location != NSNotFound)
    {
        NSInteger startIndex = singleLetter.location - 11;
        NSRange substringRange = NSMakeRange(start, 11);
        substr = [tester substringWithRange:substringRange];
    }

    return substr;
}