在Objective C中,围绕多个模式提取多个文本子串的最佳方法是什么?

Mat*_*att 0 iphone objective-c nsstring

对于一个NSString,我有N个模式字符串.我想在模式匹配"周围"提取子串.

所以,如果我有"快速的棕色狐狸跳过懒狗",我的模式是"棕色"和"懒惰",我想得到"快速棕色狐狸"和"懒狗".但是,子字符串不一定需要用空格分隔.

另一个例子是,如果你有多段文字,想在文本中找到"红色"和"蓝色"的所有实例,但你想在上下文中显示"红色"和"蓝色"的实例,但是"上下文"你不关心上下文是否以文本正文中的单词的开头或结尾开始和结束,所以如果你在文本正文中有一个句子为"有很多红鸭子树"结果可能是"在"或"红色鸭子中的大量红鸭"并且没关系 - 我不是在寻找基于空白的解决方案.它可能只是找到"红色"并获得"红色"的子串,前面的10个字符和后面的10个字符.

换句话说,存在一些基于"范围"的字符串匹配函数.我希望有一种简单的方法可以同时匹配多个字符串并返回每个字符串的匹配点和周围的字符.

Chu*_*uck 6

我想你想要的是NSScanner.要在较大的字符串中查找任意字符串,请执行以下操作:

 NSString *scannedString = nil;
 NSScanner *scanner = [NSScanner scannerWithString:@"The quick brown fox jumped over the lazy dog"];
 [scanner scanUpToString:@"brown" intoString:&scannedString];
 // scannedString is now @"The quick " and the scanner's location is right before "brown"
Run Code Online (Sandbox Code Playgroud)

要获取上下文,您需要确定要在结果中找到"褐色"的位置周围多少.

作为替代解决方案,当你总是在寻找单词时,你可以使用NSString componentsSeparatedByString:来获取一个数组,然后返回元素+ x周围的许多元素.例如:

 NSArray *words = [@"The quick brown fox jumped over the lazy dog" componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet];
 NSUInteger wordLocation = [words indexOfObject:@"brown"];
 NSString *wordInContext = [[words subarrayWithRange:NSMakeRange(brownlocation-2, brownLocation+2)] componentsJoinedByString:@" "];
Run Code Online (Sandbox Code Playgroud)

(这里的所有示例都缺少必要的错误检查,但它只是为了让您了解可以执行此类操作的方法.)