如何在字符串中多次出现替换一对字符?

时间:2015-12-23 15:31:15

标签: objective-c nsstring nsregularexpression

原始字符串是:这是一个带有(名词)(动词)(副词)的句子。

原句有三次出现()。我需要最后一个完整但用@“”替换休息

必填字符串:这是一个带有(副词)的句子。

我可以用NSRange做到,但我正在寻找NSRegularExpression模式。 另外哪个更有效,一个是NSRange或NSRegularExpression。

CODE

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\(.*?\\)" options:NSRegularExpressionCaseInsensitive error:NULL];
NSString *newString = [regex stringByReplacingMatchesInString:modify options:0 range:NSMakeRange(0, [modify length]) withTemplate:@""];

输出:这是一个带

的句子

1 个答案:

答案 0 :(得分:0)

您可以自己获取匹配范围并手动执行替换,忽略最后一个。

NSMutableString* newString = [modify mutableCopy];
NSArray<NSTextCheckingResult*>* matches = [regex matchesInString:newString options:0 range:NSMakeRange(0, newString.length)];
if (matches.count >= 2)
{
    // Enumerate backwards so that each replacement doesn't invalidate the other ranges
    for (NSInteger i = matches.count - 2; i >= 0; i--)
    {
        NSTextCheckingResult* result = matches[i];
        [newString replaceCharactersInRange:result.range withString:@""];
    }
}