0

次のコードを書いて、3つのドットの後に何も削除しませんでした

currentItem.summary = @"I am just testing. I am ... the second part should be eliminated";
NSError * error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(.)*(/././.)(.)*" options:0  error:&error];

if(nil != regex){
    currentItem.summary = [regex stringByReplacingMatchesInString:currentItem.summary
                               options:0  range:NSMakeRange(0, [currentItem.summary length])
                                               withTemplate:@"$1"];
}

ただし、私の入力と出力は同じです。正しい出力は、「I am just testing. I am」である必要があります。

文字列に対して実行する他の正規表現のデータベースがあるため、正規表現を使用してこれを実行しようとしていました。プレーンテキストの検索や置換ほどパフォーマンスが良くないことはわかっていますが、関連する文字列は短いです。また、「\」を使用して正規表現のドットをエスケープしようとしましたが、警告が表示されました。

同様のトピックに関する別の質問がありますが、一致文字列は目的 c 用ではありません。

4

5 に答える 5

3

/パターンにバック スラッシュ の代わりにスラッシュ が含まれ\ています。また、3 つのドットの前のすべてに一致させたい場合は、(.*)- タグで囲まれたすべての一致を使用する必要があります.*。(パターン内の他の括弧は冗長です。)

于 2012-07-05T18:46:31.043 に答える
2

良い代替案:

NSScanner *scanner = [NSScanner scannerWithString:currentItem.summary];   
[scanner scanUpToString:@"..." intoString: &currentItem.summary];
于 2012-07-05T18:53:38.030 に答える
1

あなたの問題に対する私の推奨正規表現:

regularExpressionWithPattern:@"^(.*)\\s*\\.{3}.*$"

これとあなたの主な違い:

  • バックスラッシュを使用して特殊文字をエスケープします
  • ^andを使用し$て、文字列の先頭と末尾に固定します
  • 興味深いセクションのみをキャプチャします()
  • ...任意の数の空白文字 ( ) を無視して、の前の空白を取り除き\s*ます。
于 2012-07-05T19:23:18.877 に答える
0

スラッシュとその他の改善を修正した後、私の最終的な表現は次のとおりです。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(.*)\\.{3}.*$" 
                                                                                options:0 
                                                                                error:&error];
于 2012-07-05T19:48:34.837 に答える