1

我正在使用这段小代码来处理一些输入的文本并提取由标记分隔的句子:

NSCharacterSet *punctuation =
[NSCharacterSet characterSetWithCharactersInString:@".!?\n"];
NSArray *parts = [data componentsSeparatedByCharactersInSet:punctuation];

问题是生成的数组从标点符号中删除。如何使用适当的标点符号存储数据?如果可能的话,我想保留用换行符 (\n) 标记的句子。

例如,如果我输入这个:

这是一个句子。它用句号标记。这句话没有标记一个怎么办?我做得很好!

我想得到这样的东西:

这是一个句子。
它用句号标记。
这句话没有标记一个
怎么办?
我做得很好!

4

4 回答 4

1

你可以[NSString stringByReplacingOccurencesOfString: ByString:]改用。

例如[NSString stringByReplacingOccurencesOfString:@"." ByString:@".\n"];

其他符号也类似。

于 2013-11-29T09:38:38.877 回答
1

希望这可以帮助:

NSString *string = @"This is a sentence. It is marked by a period. This sentence is not marked by one How do you do? I'm doing very good!";
NSError *error = nil;
NSString *pattern = @"(\\.|,|!|\\?|\\n)\\s*";
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                            options:0
                                                                              error:&error];
if (expression)
{
    NSArray *matches = [expression matchesInString:string
                                           options:0
                                             range:NSMakeRange(0, [string length])];
    NSLog(@"%@", matches);
    if ([matches count] > 0)
    {
        NSMutableArray *sentences = [[NSMutableArray alloc] initWithCapacity:[matches count]];
        NSUInteger sentenceStart = 0;
        for (NSTextCheckingResult *result in matches)
        {
            NSUInteger sentenceEnd = result.range.location + 1;
            [sentences addObject:[string substringWithRange:NSMakeRange(sentenceStart, sentenceEnd - sentenceStart)]];
            sentenceStart = sentenceEnd + (result.range.length - 1);
        }
        NSLog(@"%@", sentences);
    }
}
else
{
    NSLog(@"ERROR: %@", error);
}
于 2013-11-29T09:48:31.770 回答
1

Yogi 的答案将用于插入换行符。但是,如果要将字符串部分放入数组中,可以使用以下解决方法:

data = [data stringByReplacingOccurrencesOfString:@"." withString:@".&§"];
data = [data stringByReplacingOccurrencesOfString:@"!" withString:@"!&§"];
data = [data stringByReplacingOccurrencesOfString:@"?" withString:@"?&§"];
NSArray *parts = [data componentsSeparatedByString:@"&§"];
于 2013-11-29T09:50:23.537 回答
0
    NSString *yourString = @"This is a sentence. It is marked by a period. This sentence is not marked by one How do you do? I'm doing very good!";
    NSMutableCharacterSet *punctuation = [NSMutableCharacterSet characterSetWithCharactersInString:@".!?\n"];
   [punctuation formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
    NSMutableArray *words = [[yourString componentsSeparatedByCharactersInSet:punctuation] mutableCopy];

希望对你有帮助......

于 2013-11-29T09:56:57.440 回答