2011-12-05 13 views
1

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

'(\ D +「)|(\ D + [^」])'秒varは常に秒となり、それは常にポストコードが、いくつかの種類だけではないにpreverableある – noob

答えて

0

正規表現のマッチングは文字列から数字を読むための最良の方法であるが、ここで働くのスニペットであることを完全に納得していない:それは5'21 5分も21のような文字列を解析すること

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); 

注意それがあなたが望むものなのかどうかは分からないが、それは余分なテストで修正することができる。

0
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

最初の分になりますそれの説明も同様に – Bowdzone