Iphone 在目标C中,什么';围绕多个模式提取多个子字符串的最佳方法是什么?
对于一个NSString,我有N个模式字符串。我想提取模式匹配周围的子字符串 因此,如果我有“快速棕色狐狸跳过了懒狗”,并且我的模式是“棕色”和“懒狗”,我希望得到“快速棕色狐狸”和“懒狗”。但是,子字符串不一定需要用空格分隔 另一个例子是,如果你有多个文本段落,想在文本中找到“红色”和“蓝色”的所有实例,但你想在上下文中显示“红色”和“蓝色”的实例,但通过“上下文”,你不在乎上下文是否以文本正文中单词的开头或结尾开始和结束,因此,如果你在正文中有一句话是“树上有很多红鸭子”,那么结果可能是“树上有很多红鸭子”或“树上有很多红鸭子”,这没关系——我不是在寻找基于空格的解决方案。它可能只是找到“red”,然后得到子字符串“red”,以及前面的10个字符和后面的10个字符Iphone 在目标C中,什么';围绕多个模式提取多个子字符串的最佳方法是什么?,iphone,objective-c,nsstring,Iphone,Objective C,Nsstring,对于一个NSString,我有N个模式字符串。我想提取模式匹配周围的子字符串 因此,如果我有“快速棕色狐狸跳过了懒狗”,并且我的模式是“棕色”和“懒狗”,我希望得到“快速棕色狐狸”和“懒狗”。但是,子字符串不一定需要用空格分隔 另一个例子是,如果你有多个文本段落,想在文本中找到“红色”和“蓝色”的所有实例,但你想在上下文中显示“红色”和“蓝色”的实例,但通过“上下文”,你不在乎上下文是否以文本正文中单词的开头或结尾开始和结束,因此,如果你在正文中有一句话是“树上有很多红鸭子”,那么结果可能是“树
换句话说,有一些基于“范围”的字符串匹配函数。我希望有一种简单的方法可以同时匹配多个字符串,并返回每个字符串的匹配点加上周围的字符。我想您需要的是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"
要获得上下文,您需要确定在“brown”被发现的位置周围要包含多少内容
当您总是在寻找单词时,作为一种替代解决方案,您可以使用NSString的组件通过string:
获得一个数组,然后返回该数组周围的元素+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:@" "];
(这里的所有示例都缺少必要的错误检查,但这只是为了让您了解可以执行类似操作的方法。)您可以使用第三方框架(例如或)提供的正则表达式。要创建RE,请使用带“|”的模式以及前置和追加括号和模式来捕获上下文。针对regexp的字符串 一些前缀和后缀模式示例:
,“{,15}(
以匹配最多15个字符”)。{,15}”
,“(\w+\w+{,4}(
)以匹配最多4个单词”)(\w+\w+{,4}“