我一直在尝试使用正则表达式来分隔一大段文本中的完整句子。我不能使用 componentsSeparatedByCharactersInSet,因为它显然会因以 ?!、!!、结尾的句子而失败……我见过一些外部类可以执行 componentSeparateByRegEx,但我更喜欢在不添加外部库的情况下执行此操作。
这是一个示例输入 嗨,我正在测试。你好吗?哇!!这是最好的,我很高兴。
输出应该是一个数组
第一个元素:你好,我正在测试。
第二个元素:你好吗?
第三个元素:哇!!
第四要素:这是最好的,我很高兴。
这就是我所拥有的,但正如我所提到的,它不应该按照我的意图进行。可能正则表达式在这里会做得更好。
-(NSArray *)getArrayOfFullSentencesFromBlockOfText:(NSString *)textBlock{
NSMutableCharacterSet *characterSet = [[NSMutableCharacterSet alloc] init];
[characterSet addCharactersInString:@".?!"];
NSArray * sentenceArray = [textBlock componentsSeparatedByCharactersInSet:characterSet];
return sentenceArray;
}
感谢您的帮助,
最佳答案
您想将 -[NSString enumerateSubstringsInRange:options:usingBlock:]
与 NSStringEnumerationBySentences
选项一起使用。这将为您提供每个句子,并且以语言感知的方式提供。
NSArray *fullSentencesFromText(NSString *text) {
NSMutableArray *results = [NSMutableArray array];
[text enumerateSubstringsInRange:NSMakeRange(0, [text length]) options:NSStringEnumerationBySentences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[results addObject:substring];
}];
return results;
}
请注意,在测试中,每个子字符串似乎都包含标点符号后的尾随空格。你可能想把它们去掉。
关于objective-c - 在 NSString 文本 block 中分隔完整的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402492/