用于删除(嵌套)括号的正则表达式

时间:2012-07-18 16:28:05

标签: objective-c regex nsstring

我使用DOM将Wikipedia文章作为NSString获取,然后使用NSString stringByReplacingOccurrencesOfString:withString:options:range:删除不需要的东西。我正在使用正则表达式,我没有多少经验。从阅读Apple的文档和尝试我能够做到的事情

"\\[[\\w]+\\]"

正则表达式,删除维基百科文章中的括号。这非常合适,因为括号不是嵌套的。

现在我试图从NSString中删除括号(包括其中的所有内容(和嵌套的))。我遇到了嵌套部分的问题。有了这个

\\s+\\([^\\)]*+\\)

正则表达式我能够删除一组括号,包括前面的空格(所以我删除之后不会有重复的空格)。我可以使用什么正则表达式来执行同样的操作,而是删除嵌套的括号?

我当前的实施将改变这个

  

快速的棕色(略带红色)狐狸跳过懒惰(他年纪大了(26岁)并且精疲力竭)狗。

进入这个

  

快速的棕色狐狸跳过那只懒散而疲惫的狗。

虽然期望的结果是这个

  

快速的棕色狐狸跳过懒狗。

1 个答案:

答案 0 :(得分:1)

我明白了。此方法将返回没有嵌套括号的字符串。

-(NSString*)stringWithoutParentheses:(NSString*)input{
     NSString *expression = @"\\s+\\([^()]*\\)";
     while ([input rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location!=NSNotFound)
     {
          input = [input stringByReplacingOccurrencesOfString:expression withString:@"" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [input length])];
     }
     return input;
}

使用此方法,传递

  

快速的棕色(略带红色)狐狸跳过了懒惰的狗(他已经老了(26岁)并且筋疲力尽)。

将返回

  

快速的棕色狐狸跳过懒狗。