目标C:在括号内分割文本

我需要分割文本(NSString),看起来像这样:

[text],[more text here].

有没有办法做到这一点? 我需要在一个String []中存储括号之间的两个文本,用“,”分隔。

你可以使用正则expression式和NSRegularExpression来解决这个问题。

构build一个匹配括号内文本的模式。 例如,模式@"\\[([^]]*)]"匹配左括号\\[ – 需要使用反斜杠将括号视为文字字符,除括号外的零个或多个字符[^]]* ,文本所指的组([^]]*) ,以及右括号。 你可以build立一个与逗号分隔的支架文本序列相匹配的模式,或者只是查找多个包围文本的匹配 – 取决于你的要求。

一旦创build了正则expression式,使用方法regularExpressionWithPattern:options:error: matchesInString:options:range:方法matchesInString:options:range:可以用来获取所有匹配的数组。 你可以处理这个数组来产生你需要的string数组。

如果你只想把@“[文字],[更多文字在这里]”。 进入@“文字,这里更多的文字”,然后你可以使用扫描仪。

 NSString *input = @"[text],[more text here]"; NSScanner *scanner = [NSScanner scannerWithString:input]; NSString *firstString; NSString *secondString; NSCharacterSet *openingBracketSet = [NSCharacterSet characterSetWithCharactersInString:@"["]; NSCharacterSet *closingBracketSet = [NSCharacterSet characterSetWithCharactersInString:@"]"]; while (![scanner isAtEnd]) { // Scan the opening brace, discarding the result [scanner scanString:@"[" intoString:NULL]; // Scan the first string [scanner scanUpToCharactersFromSet:closingBracketSet intoString:&firstString]; // Scan to the second opening brace, discarding the result [scanner scanUpToCharactersFromSet:openingBracketSet intoString:NULL]; [scanner scanString:@"[" intoString:NULL]; // Scan the second string [scanner scanUpToCharactersFromSet:closingBracketSet intoString:&secondString]; } NSString *result = [NSString stringWithFormat:@"%@, %@", firstString, secondString]; NSLog(@"result: %@", result); 

您可能认为这是过度的,但使用NSScanners是非常灵活的,这是一个有用的技能知道。

 NSMutableArray * result = [NSMutableArray array]; NSArray * commaSeparatedParenthesizedStrings = [input componentsSeparatedByString:@","]; NSCharacterSet * bracketsToTrim = [NSCharacterSet characterSetWithCharactersInString:@"[]"]; forin (NSString * s in commaSeparatedParenthesizedStrings) { [result addObject:[s stringByTrimmingCharactersInSet:bracketsToTrim]]; } 

请注意,这个解决scheme没有考虑括号的逗号,而且会修剪input中的所有括号,所以[[[[[]][[]]hello][][[[][][]][][], [[][[][]world[[]][[]][]]将返回@[@"hello", @"world"]

上面的NSScanner解决scheme或类似的解决scheme应该更加健壮,以确保在分割inputstring时避免括号内的逗号。

尝试这个…

  NSString *testString = @"[more],[more te,xt here],[],[,,,,],[text3]"; NSArray *array = [testString componentsSeparatedByString:@"],["]; NSString *text = @""; for (int i = 0; i < array.count; i++){ NSString *word = [array objectAtIndex: i]; NSString *aux = @""; NSRange range; if(i == 0){ range = NSMakeRange(1, word.length - 1); } else{ aux = @","; if(i == array.count - 1) range = NSMakeRange(0, word.length - 1); else range = NSMakeRange(0, word.length); } aux = [aux stringByAppendingString: [word substringWithRange:range]]; text = [text stringByAppendingString:aux]; } NSLog(@"%@",text); 
    Interesting Posts