stringByReplacingOccurrencesOfString替换较长单词的复合词

时间:2012-05-24 13:34:22

标签: ios objective-c regex string nsstring

使用stringByReplacingOccurrencesOfString时,它似乎取代了单词中的单词。例如,

The house was held together by...

用'A'替换​​'the'的出现将导致

A house was held togeAr by...

我该如何避免这种情况?我知道我可以在被替换的单词的两边添加空格以确保它不是更长的单词的一部分,但是这并不适用于所有情况,特别是在被替换的单词是句子中的第一个或最后一个单词的情况下(也就是说,当两侧没有空白区域时)。

2 个答案:

答案 0 :(得分:4)

您应该使用NSRegularExpression模式\bthe\b,其中\b表示单词边界。

NSString *input = @"The house was held together by...";
NSString *string = @"the";
NSString *replacement = @"A";

NSString *pattern = [NSString stringWithFormat:@"\\b%@\\b", string];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
NSString *result = [regex stringByReplacingMatchesInString:input options:0 range:NSMakeRange(0, input.length) withTemplate:replacement];

NSLog(@"%@", result);
// A house was held together by...

答案 1 :(得分:1)

对于更复杂的替换操作,您可以使用NSRegularExpression。您可以搜索(^| )the($| )之类的内容并替换匹配。