2015-02-05 3 views
0

Я пытаюсь обрезать NSString после обнаружения 3 новых экземпляров строк. (\ П). Итак, это то, что я пробовал:Trim an NSString, основанный на количестве сообщений символов

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\n" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [myString length])]; 

Теперь количество матчей всегда будет превышать 3, и я хочу, чтобы остановить строку вправо, как она попадает в третью \ п. Кто-нибудь знает какую-либо хорошую логику для этого?

ответ

1

Если 3 новые экземпляры строки всегда группируются вместе, это довольно легко:

NSString *testString = @"The quick brown fox jumps \n\n\n over the lazy dog. \n\n\n New Line."; 
[[string componentsSeparatedByString:@"\n\n\n"] firstObject] 

В противном случае вы можете использовать:

 NSError *error; 
     NSString *pattern = @"(\\A|\\n\\s*\\n\\s*\\n)(.*?\\S[\\s\\S]*?\\S)(?=(\\Z|\\s*\\n\\s*\\n\\s*\\n))"; 
     NSRegularExpression* regex = [[NSRegularExpression alloc] initWithPattern:pattern 
                      options:NSRegularExpressionCaseInsensitive 
                      error:&error]; 
     [regex enumerateMatchesInString:testString 
           options:0 
            range:NSMakeRange(0, [testString length]) 
          usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
           NSString *match = [testString substringWithRange:[result rangeAtIndex:2]]; 
           NSLog(@"match = '%@'", match); 
          }]; 

(Взято из this ответа)

0
NSString* originalString = @"This\nis\na\ntest string"; 
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@".*\\n.*\\n.*\\n" options:0 error:nil]; 
NSRange range = [regex rangeOfFirstMatchInString:originalString options:0 range:(NSRange){0,originalString.length}]; 
NSString* trimmedString = [originalString substringFromIndex:range.length]; 

NSLog(@"Original: %@", originalString); 
NSLog(@"Trimmed: %@", trimmedString); 

Отпечатки:

2015-02-05 21:39:41.491 TestProject[4258:1269568] Original: This 
is 
a 
test string 
2015-02-05 21:39:41.492 TestProject[4258:1269568] Trimmed: test string