цели, пытающиеся получить группу извлеченной строки от regex

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

-(NSString*) ExtractArtistNameFromString:(NSString*) line
{

    NSString* substringForMatch = @""   
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d+\\s+(.*)"
                                                                        options:NSRegularExpressionCaseInsensitive
                                                                        error:&error];

    if (error) {
        NSLog(@"Error:%@", error);  
    }

    NSArray *matches = [regex matchesInString:line
                                              options:0
                                              range:NSMakeRange(0, [line length])]; 

    NSUInteger elements = [matches count];
    NSLog(@"numberOfMatches:%u",elements);

    if(elements > 0)
    {

        for(NSTextCheckingResult *match in matches)
        {
            NSString* substringForMatch = [line substringWithRange:match.range];
            NSUInteger slen = [substringForMatch length];
            NSLog(@"Extracted  : %@",substringForMatch);
            NSLog(@"%u",slen);
            NSLog(@"%@",substringForMatch);
        }        
    }
    return substringForMatch;
} 

входная строка:

1 Барсотти, Марсель

то, что я пытаюсь извлечь, является именем, которое является: Барсотти, Марсель

и когда я управляю приложением, я получаю этот результат:

2013-01-29 11:31:24.056 file_parser[2496] numberOfMatches:1
2013-01-29 11:31:24.062 file_parser[2496] Extracted  : 1        Barsotti, Marcel
2013-01-29 11:31:24.064 file_parser[2496] 18
2013-01-29 11:31:24.066 file_parser[2496] 1     Barsotti, Marcel

Я использую GNUsetup в окнах, сделать команда:

сделайте CC=clang

0
nl ja de
я обновил вопрос
добавлено автор user63898, источник
Пожалуйста, определите точно, что вы пытаетесь извлечь, и детали возможных входных строк.
добавлено автор MikeM, источник

1 ответы

Я вижу то, что вы пытаетесь сделать. Документация для NSTextCheckingResult шоу, что у результата могут быть многократные диапазоны в нем, все же вы только ссылаетесь на первый диапазон.

Например, у вашего RegEx и вашей последовательности будет 1 матч с 1 группой захвата в нем. Это:

  1. 1 Барсотти, Марсель
  2. Барсотти, Марсель

Пока у вас только есть один NSTextCheckingResult , есть многократные диапазоны в нем. Вы использовали

NSString* substringForMatch = [line substringWithRange:match.range];

Это возвратит первый упомянутый выше результат. То, что вы хотите, второе. Чтобы получить это, необходимо использовать

NSString* substringForMatch = [line substringWithRange:[match rangeAtIndex:1]];

Чтобы удостовериться вы не превышаете rangeAtIndex: , собственность numberOfRanges существует, чтобы позволить вам оставаться в рамках границ. Помните, [соответствуют rangeAtIndex:0] является тем же самым в match.range .

1
добавлено