如何使用NSRegularExpression删除字符串中的括号?
问题描述:
我不是太熟悉正则表达式,所以我一直有一些得到这与苹果的NSRegularExpression如何使用NSRegularExpression删除字符串中的括号?
我试图删除括号或括号中的词......
例如工作:
的NSString *海峡= @“你怎么使用(括号去掉的话)的字符串中”
得到的字符串应该是:@
“使用你怎么在字符串中”谢谢!!!
答
搜索
\([^()]*\)
,并没有更换。
作为一个详细的正则表达式:
\( # match an opening parenthesis
[^()]* # match any number of characters except parentheses
\) # match a closing parenthesis
这将正常工作,如果括号是正确的平衡和嵌套的。如果括号可以嵌套(like this (for example))
,那么你需要重新运行替换直到没有更多的匹配,因为只有最里面的括号将在每次运行相匹配。*
要卸下支架,做相同的\[[^[\]]*\]
,大括号\{[^{}]*\}
。
有了条件表达式,你可以一次完成所有的三个,但是正则表达式看起来很丑陋,不是吗?
(?:(\()|(\[)|(\{))[^(){}[\]]*(?(1)\))(?(2)\])(?(3)\})
但是,我不确定是否NSRegularExpression可以处理条件。可能不会。这个怪物的说明:
(?: # start of non-capturing group (needed for alternation)
(\() # Either match an opening paren and capture in backref #1
| # or
(\[) # match an opening bracket into backref #2
| # or
(\{) # match an opening brace into backref #3
) # end of non-capturing group
[^(){}[\]]* # match any number of non-paren/bracket/brace characters
(?(1)\)) # if capturing group #1 matched before, then match a closing parenthesis
(?(2)\]) # if #2 matched, match a closing bracket
(?(3)\}) # if #3 matched, match a closing brace.
* 不能匹配任意嵌套的括号(因为这些结构不再是常规的)正则表达式,所以这不是这个表达式尤其但一般正则表达式中的限制。
感谢您的解释哥们!这有助于很多! – Unikorn 2010-09-18 11:59:49
对于这个例子:(像这样(例如)) NSString * match = @“\\(。* \\)”;似乎工作。 – Unikorn 2010-09-18 12:10:18
是的,但它会在保留(删除)保留(删除)保留时失败 - 它从第一个到最后一个括号匹配,删除中间的“保留”!您无法使用正则表达式匹配不规则的语言。有些风格(如Perl或.NET)可以进行递归匹配,但几乎总是一个坏主意。这不是正则表达式。 – 2010-09-18 12:25:42