删除没有正则表达式的括号

时间:2013-03-19 23:00:45

标签: ios objective-c

我需要改变这样的事情

NSString *stringWithParentheses = @"This string uses (something special)";

以编程方式进入此。

NSString *normalString = @"This string uses";

问题是我不想使用所有这些奇怪的库,正则表达式等。

3 个答案:

答案 0 :(得分:5)

如果你改变了对正则表达式的看法,这里有一个简短,干净的解决方案:

NSString *foo = @"First part (remove) (me (and ((me)))))) (and me) too))";
NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:@"\\(.*\\)" options:0 error:NULL];
NSString *bar = [expr stringByReplacingMatchesInString:foo options:0 range:NSMakeRange(0, foo.length) withTemplate:@""];

()之间的所有内容都会被删除,包括括号内的任何嵌套括号和不匹配的括号。

答案 1 :(得分:4)

找到第一个打开的括号,记下它的索引,找到结束的括号,记下它的索引,并删除索引之间的字符(包括索引本身)。

要查找角色使用:

[string rangeOfString:@"("];

删除范围:

[string stringByReplacingCharactersInRange:...  withString:@""];

以下是解决方案:

NSString* str = @"This string uses (something special)";
NSRange rgMin = [str rangeOfString:@"("];
NSRange rgMax = [str rangeOfString:@")"];

NSRange replaceRange = NSMakeRange(rgMin.location, rgMax.location-rgMin.location+1);

NSString* newString = str;

if (rgMin.location < rgMax.location)
{
    newString = [str stringByReplacingCharactersInRange:replaceRange withString:@""];
}

它不会在嵌套括号上工作。或多个括号。但它适用于你的例子。这将根据您的具体情况进行改进。

答案 2 :(得分:3)

一种方法是找到第一次出现'('字符和')'字符的最后一次出现的位置,并通过消除这些范围之间的所有字符来构建子字符串。我举了一个例子:

NSString* str= @"This string uses (something special)";
NSRange r1=[str rangeOfString: @"("];
NSRange r2= [str rangeOfString: @")" options: NSBackwardsSearch];
NSLog(@"%@",[str stringByReplacingCharactersInRange: NSMakeRange(r1.location, r2.location+r2.length-r1.location) withString: @""]);