NSRegularExpression для получения чисел из строки - PullRequest
1 голос
/ 12 октября 2011

Я использовал NSScanner для получения чисел из текста ниже.Но иногда результат не похож на то, что ожидается.Слышал, что класс NSRegularExpression, который доступен для iOS 4, лучше делать этот тип извлечения.Поскольку я новичок в NSRegularExpression, я обнаружил, что документацию, предоставляемую Apple, трудно понять.Любая помощь будет оценена.Спасибо.

Ввод:

1D03 04 10 17 47 D24 -

Выход:

03 04 1017 47 24

Первые 5 наборов чисел должны быть меньше 59, а последний набор должен быть меньше 39.

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

попробуйте это ..

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 голос
/ 12 октября 2011

Или это:

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). Спички заменяются буксирными цифрами в середине строки.

...