【发布时间】:2012-07-18 16:28:05
【问题描述】:
我正在使用 DOM 将 Wikipedia 文章作为 NSString 获取,然后使用 NSString stringByReplacingOccurrencesOfString:withString:options:range: 删除不需要的东西。我正在使用正则表达式,我对此没有太多经验。通过阅读 Apple 的文档并尝试我能够做到这一点
"\\[[\\w]+\\]"
从维基百科文章中删除括号的正则表达式。这工作得很好,因为括号没有嵌套。
现在我正在尝试从 NSString 中删除括号(包括其中的所有内容(和嵌套的))。我在嵌套部分遇到问题。有了这个
\\s+\\([^\\)]*+\\)
正则表达式我能够删除一组括号,包括它之前的空格(所以我不会在删除后得到重复的空格)。我可以使用什么正则表达式来做同样的事情,但也可以删除嵌套的括号?
我当前的实现将改变这一点
快速的棕色(略带红色)狐狸跳过了懒惰的(他老了(26 岁)并且筋疲力尽)。
进入这个
敏捷的棕色狐狸跳过了懒惰和疲惫的)狗。
而想要的结果是这样的
敏捷的棕色狐狸跳过了懒惰的狗。
【问题讨论】:
-
试试这个:删除 [^\)]* 并改写 .* 以使 * 运算符变得贪婪。如果这不起作用,则可能无法使用纯正则表达式来解决此问题。
-
"\\s+\(*+\)" 得到了原来的表达式,“快速的棕色(略带红色)狐狸跳过了懒惰的(他老了(26)并且筋疲力尽) 。”
-
不要试图“解析”维基百科页面源。他们有一个excellent api 来获取渲染的内容。
-
正则表达式一般不适合“解析”嵌套语法。
-
我认为它的工作方式如下: 1. 找到左括号。 2. 继续直到下一个左括号。 3. 如果这两个左括号之间有右括号,则在索引最高的右括号处结束查找。如果没有找到右括号,请重复第 2 步和第 3 步。
标签: objective-c regex nsstring