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

Objective c 用于删除(嵌套)括号的正则表达式,objective-c,regex,nsstring,Objective C,Regex,Nsstring,我使用DOM将Wikipedia文章作为NSString获取,然后使用NSString stringByReplacingOccurrencesOfString:withString:options:range:删除不需要的内容。我使用的是正则表达式,我没有太多的经验。通过阅读苹果的文档和尝试,我做到了这一点 "\\[[\\w]+\\]" 从Wikipedia文章中删除括号的正则表达式。这非常好,因为括号没有嵌套 现在我试图从NSString中删除括号(包括括号内的所有内容(以及嵌套的内容))

我使用DOM将Wikipedia文章作为NSString获取,然后使用NSString stringByReplacingOccurrencesOfString:withString:options:range:删除不需要的内容。我使用的是正则表达式,我没有太多的经验。通过阅读苹果的文档和尝试,我做到了这一点

"\\[[\\w]+\\]"
从Wikipedia文章中删除括号的正则表达式。这非常好,因为括号没有嵌套

现在我试图从NSString中删除括号(包括括号内的所有内容(以及嵌套的内容))。我的嵌套部分有问题。用这个

\\s+\\([^\\)]*+\\)
正则表达式我能够删除一组括号,包括它前面的空格(所以删除后不会出现重复的空格)。我可以使用什么正则表达式来做同样的事情,但也可以删除嵌套的括号

我当前的实现将改变这一点

这只敏捷的棕色(略带红色)狐狸跳过了这只懒惰(26岁,精疲力竭)的狗

进入这个

那只敏捷的棕色狐狸跳过了那只懒洋洋、精疲力竭的狗

而理想的结果是这样的

那只敏捷的棕色狐狸跳过了那只懒狗


我想出来了。此方法将返回不带嵌套括号的字符串

-(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岁,精疲力竭的)狗

会回来的

那只敏捷的棕色狐狸跳过了那只懒狗


尝试以下操作:删除[^\)]*并写入。*,以使*运算符贪婪。如果这不起作用,可能无法使用纯正则表达式来解决此问题。“\\s+\(*+\)”只产生了原始表达式,“棕色(略带红色)的狐狸跳过了懒惰(26岁,精疲力竭)的狗。”不要试图“解析”维基百科页面源。正则表达式通常不适合对嵌套语法进行“解析”。我认为它的工作原理如下:1。查找开括号。2.继续,直到下一个开括号。3.如果这两个开括号之间有一个右括号,则在索引最高的右括号处结束查找。如果找不到右括号,请重复步骤2和3。关于此表达式的解释是,它仅删除内括号,但会重复此操作,直到没有更多匹配的括号为止。