Регулярное выражение для извлечения минуты и секунды - PullRequest
1 голос
/ 05 декабря 2011

Как мне извлечь минуты и секунды из NSString? Примеры:

3'15" or 3' 15" (3 minutes 15 seconds)
28" (28 seconds)
2' (2 minutes)
50 (default is in seconds, 50 seconds) 

и сохраняет в два NSInteger с?

Ответы [ 2 ]

0 голосов
/ 06 января 2015
NSArray *data = @[@"3'15\"", @"3' 15\"", @"28\"", @"2'", @"50"];
NSString *pattern = @"(\\d++')|(\\d++(\"{0,1})$)";

NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                        options:NSRegularExpressionCaseInsensitive
                                                                          error:nil];
for (NSString *string in data) {
    NSInteger mi = 0;
    NSInteger ss = 0;

    NSArray *match = [regExp matchesInString:string options:0 range:NSMakeRange(0,string.length)];
    for (NSTextCheckingResult *result in match) {

        NSString *value = [string substringWithRange:result.range];
        if ([value hasSuffix:@"'"]) {
            mi = [value integerValue];
        } else {
            ss = [value integerValue];
        }
    }
    NSLog(@"%@ - %d %d",string,mi,ss);
}
0 голосов
/ 05 декабря 2011

Не совсем уверен, что сопоставление с RegEx - лучший способ считывания чисел из строки, но вот фрагмент кода, который работает:

NSString *str = @"12'34\"";

NSString *minutePattern = @"[[:digit:]]+'";
NSString *secondPattern = @"[[:digit:]]+\"?";

NSRange minuteRange = [str rangeOfString: minutePattern options: NSRegularExpressionSearch];

NSRange  secondStartRange;
NSString *minuteString = @"";
if ( minuteRange.location != NSNotFound) 
{
    minuteString = [str substringWithRange: minuteRange];
    NSUInteger secondStartPt = NSMaxRange(minuteRange);
    secondStartRange = NSMakeRange(secondStartPt, str.length - secondStartPt);
}
else {
    secondStartRange = NSMakeRange(0, str.length);
}

NSRange secondRange = [str rangeOfString: secondPattern 
                                 options: NSRegularExpressionSearch
                                   range: secondStartRange];

NSString *secondString = @"";
if ( secondRange.location != NSNotFound) 
{
    secondString = [str substringWithRange: secondRange];
}

NSInteger minutes = [minuteString integerValue];
NSInteger seconds = [secondString integerValue];

NSLog(@"Minutes: %d, seconds: %d", minutes, seconds);

Обратите внимание, что он будет анализировать строку типа 5'21 как 5 минут 21 секунду, не уверен, что это именно то, что вам нужно, но это можно исправить с помощью дополнительного теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...