У меня есть следующий NSString:
Hello (my name is) John
Как быстро и легко удалить часть (my name is)
? Я хочу убедиться, что он обрабатывает ситуации, когда есть только (
, а затем следующий за ним )
, и не падает ни на чем другом.
У меня есть следующий NSString:
Hello (my name is) John
Как быстро и легко удалить часть (my name is)
? Я хочу убедиться, что он обрабатывает ситуации, когда есть только (
, а затем следующий за ним )
, и не падает ни на чем другом.
Если вы хотите удалить текст между скобками, тогда... удалите текст между скобками.
NSMutableString *s = [NSMutableString stringWithString:@"Hello (my name is) John"];
NSRange start = [s rangeOfString:@"("];
NSRange end = [s rangeOfString:@")"];
[s deleteCharactersInRange:(NSRange){ start.location, end.location - start.location + 1}];
(повторяйте процесс, пока не появятся скобки)
Легко сделать с помощью регулярных выражений (жадных):
NSError *error = NULL;
NSString *stringToBeReplaced = @"Hello (my name is) John";
NSString *regexString = @"\\(.*\\)";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:stringToBeReplaced options:0 range:NSMakeRange(0, [stringToBeReplaced length]) withTemplate:@""];
// Greedy means it will match "My name (is John) (Jobs)." => "My name ."
Для нежадного использования регулярного выражения:
NSString *regex = @"\\(.*?\\)";
Если в вашем тексте есть более одного вхождения ()
, вы можете попробовать что-то вроде:
-(NSString *)clearString:(NSString *)stringToClear {
while([stringToClear rangeOfString:@"("].location != NSNotFound) {
NSRange firstRange = [stringToClear rangeOfString:@"("];
NSRange secondRange = [stringToClear rangeOfString:@")"];
stringToClear = [stringToClear stringByReplacingCharactersInRange:
NSMakeRange(firstRange.location, secondRange.location)
withString:@""];
}
return stringToClear;
}
(
и)
и удалите все между ними (эй, это действительно то, о чем вы просили). - person   schedule 04.06.2013