2015-07-16 3 views
1

Я чувствую, что исчерпал каждое регулярное выражение, о котором я могу думать, и прочитал каждую часть документации NSRegularExpression, на которую я могу получить мои руки, но я все еще не могу понять это вне.NSRegularExpression для удаления цифр в круглых скобках в конце строки

У меня есть некоторые NSStrings, которые заканчиваются цифрой в круглых скобках (что-то вроде «blah blah blah (33)». Я хочу удалить круглые скобки, пробелы и цифры, но только если он совпадает в конце строки и только в том случае, если содержимое круглых скобок является только цифрами (предыдущий пример был бы «blah blah blah»). Мое регулярное выражение ниже близко, но оно будет соответствовать, если в регулярном выражении есть незнаковые символы, и это будет соответствовать, если больше содержания в конце строки, после скобок:

NSArray *testStrings = @[@"hello (2)", @"hello (22)", @"hello (22) a", @"hello (2s)"]; 

    for (NSString *msg in testStrings) { 

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

    if (!error) { 

     NSLog(@"%lu", [regex numberOfMatchesInString:msg options:0 range:NSMakeRange(0, [msg length])]); 

     NSString* plainText = [regex stringByReplacingMatchesInString: msg 
                  options: 0 
                   range: NSMakeRange(0, [msg length]) 
                 withTemplate: @""]; 

     NSLog(@"%@", plainText); 
    } 
    } 

Ниже выход:

test[93719:10248184] 4 
test[93719:10248184] hello 
test[93719:10248184] 5 
test[93719:10248184] hello 
test[93719:10248184] 6 
test[93719:10248184] helloa 
test[93719:10248184] 4 
test[93719:10248184] hellos 

Любая помощь приветствуется!

+0

Ответ stribizhevs на месте, хотя вы хотите совместить строку типа 'hello (1) world (23)'? –

ответ

1

Вы должны использовать

\s*\(\d+\)$ 

См demo

В Objective-C, decalre в @"\\s*\\(\\d+\\)$".

Вашего регулярное выражение - [\s\(\d+\)$] - охватывает все подшаблоны в квадратные скобки, таким образом, создавая класс символов, соответствующие 1 символ: пробел, или (, или цифры, или + или ) или $.

Итак, вам нужно удалить квадратные скобки и добавить квантор * в класс сокращенных пробелов \s, чтобы можно было сопоставить все ведущие пробелы.

+1

Имеет смысл. Благодаря! – user4034838

+0

Если у вас есть еще какие-то сомнения, пожалуйста, напишите комментарий. –

Смежные вопросы