3

私はDOMを使用してウィキペディアの記事を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 に答える