0

我需要像这样替换一个字符串;

NSString *temp = @"this is a sentence";

NSString *temp = @"this is a <span style=\"color:red\">sentence</span>"

现在我可以使用以下行来做到这一点;

temp = [temp stringByReplacingOccurrencesOfString:@"sentence" withString:@"<span style=\"color:red\">sentence</span>" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [temp length])];

现在使用上面的问题是我不知道替换或替换字符串将是什么情况。我可以通过使用不敏感搜索来解决这个问题,但我需要替换字符串的格式与最终输出中的原始文件。

编辑

我过度简化了我的问题,因此更容易理解,但本质上我需要 stringByReplacingOccurrencesOfString 同时忽略大写/小写但同时在最终字符串上保持相同的大写/小写。

4

3 回答 3

3

您可以进行“正则表达式”替换,其中$0替换字符串指的是实际找到的子字符串:

NSString *temp = @"this is a foo, or a FOO";
NSString *result = [temp stringByReplacingOccurrencesOfString:@"foo"
                    withString:@"<span>$0</span>"
                       options:NSRegularExpressionSearch|NSCaseInsensitiveSearch
                         range:NSMakeRange(0, [temp length])];

结果:

这是一个 <span>foo</span>,或者一个 <span>FOO</span>

但请注意,搜索模式中的任何正则表达式“特殊字符”都必须转义。

于 2013-10-15T13:02:03.710 回答
1

您应该使用正则表达式来查找“句子”并在其周围添加标签。

$1指的是匹配的正则表达式组(句子)

\b表示正则表达式中的单词边界。如果你不包括它,像“asentenceb”这样的词也会被匹配。

NSString *test = @"my test sentence is a Sentence. Oh yes, a sEnTenCe!";
NSRange testRange = NSMakeRange(0, test.length);

// Create regex object
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\b(sentence)\\b" options:NSRegularExpressionCaseInsensitive error:&error];

// Replace matches with template
NSString *modifiedString = [regex stringByReplacingMatchesInString:test options:0 range:testRange withTemplate:@"<span style=\"color:red\">$1</span>"];

注意:你可以用stringByReplacingOccurrencesOfString做一些类似的事情。

于 2013-10-15T13:41:21.257 回答
0

检查是否 <span style=\"color:red\">sentence</span> 在您的 nsstring 中。如果没有,用新的 nsstring 替换原来的 nsstring

于 2013-10-15T11:41:59.963 回答