NSRegularExpression用于从字符串中检索数字

时间:2011-10-12 04:51:23

标签: iphone objective-c regex xcode nsregularexpression

我曾使用NSScanner从下面的文本中检索数字。但有时结果并不像预期的那样。听说iOS 4提供的NSRegularExpression类更适合进行这种类型的提取。由于我是NSRegularExpression的初学者,我发现Apple提供的文档很难理解。任何帮助将不胜感激。感谢。

输入:

  

1D03 04 10 17 47 D24 -

输出:

  

03 04 10 17 47 24

前5组数字应小于59,最后一组应小于39。

2 个答案:

答案 0 :(得分:2)

试试这个..

NSString *originalString = @"1D03 04 10 17 47 D24---";

NSLog(@"%@", originalString);
NSMutableString *strippedString = [NSMutableString 
                                   stringWithCapacity:originalString.length];

NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet 
                           characterSetWithCharactersInString:@"0123456789  "];

while ([scanner isAtEnd] == NO) {
    NSString *buffer;
    if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) {
        [strippedString appendString:buffer];

    } else {
        [scanner setScanLocation:([scanner scanLocation] + 1)];
    }
}

NSLog(@"%@", strippedString);

答案 1 :(得分:1)

或者这个:

NSString *string = @"1D03 04 10 17 47 D24---";

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\S*(\\d{2})\\S*"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];


NSString *modifiedString = [regex stringByReplacingMatchesInString:string
                                                           options:0
                                                             range:NSMakeRange(0, [string length])
                                                      withTemplate:@"$1"];

此正则表达式匹配以0或更多非空格字符(\ S)开头和结尾的所有内容,并且中间有两位数字(\ d)。匹配由字符串中间的两位数字代替。