objective-c - 在 NSString 文本 block 中分隔完整的句子

标签 objective-c ios ios5 ios4

我一直在尝试使用正则表达式来分隔一大段文本中的完整句子。我不能使用 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/

相关文章:

ios - 崩溃 : AVAudioSession Notify Thread in iOS

objective-c - 停止自动调用 ios5 生命周期事件

ios - 当可达性连接丢失时显示警报 View

c++ - 将日志宏转换为 Objective-C 字符串

ios - 以编程方式滚动 UIScrollView

ios - UITableView 左间隙

ios - 如何正确重用 UITableView 中的单元格

iOS 5及以上版本: enable landscape mode in MPMoviePlayerController

ios - 如何使用动画 iOS 显示模态视图?

ios - GCD设置线程间的调度/优先级