3

我正在使用 DOM 将 Wikipedia 文章作为 NSString 获取,然后使用 NSString stringByReplacingOccurrencesOfString:withString:options:range: 删除不需要的东西。我正在使用正则表达式,我对此没有太多经验。通过阅读 Apple 的文档并尝试我能够做到这一点

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

从维基百科文章中删除括号的正则表达式。这工作得很好,因为括号没有嵌套。

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

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

正则表达式我能够删除一组括号,包括它之前的空格(所以我不会在删除之后得到重复的空格)。我可以使用什么正则表达式来做同样的事情,但也可以删除嵌套括号?

我目前的实施将改变这一点

敏捷的棕色(略带红色)狐狸跳过了懒惰的(他老了(26 岁)并且筋疲力尽)。

进入这个

敏捷的棕色狐狸跳过了懒惰和筋疲力尽的)狗。

而想要的结果是这样的

敏捷的棕色狐狸跳过了懒惰的狗。

4

1 回答 1

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)并且筋疲力尽)狗。

将返回

敏捷的棕色狐狸跳过了懒惰的狗。

于 2012-07-18T18:22:53.227 回答