3

次のように、テキスト内の文字列形式の日付を検出して削除できるかどうかを知りたいです。

Title 31 December 2012
Title December 2012
Title 31-12-12
Title (31-12-12)

この3つの例では、すべての場合にすべてを削除し、ワールド「タイトル」のみを残したいので、たとえば、括弧内のテキストを削除するこのメソッドを見つけました。

 searchText = [searchText stringByReplacingOccurrencesOfString:@" \\([^()]*\\)" withString:@"" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];

これを削除することはできますが(31-12-12)、他の場合にどうすればよいかわかりません...

4

2 に答える 2

2

1つのREに結合します。

NSString *reText = @" ((\\d{2} )?\\w+ \\d{4})|(\\(?\\d{2}-\\d{2}-\\d{2}\\)?)";   

これは実際には2つのREで構成されているか、一緒になっていることに注意してください。

(\\d{2} )?\\w+ \\d{4}

\\(?\\d{2}-\\d{2}-\\d{2}\\)?

NSRegularExpressionクラスリファレンスを参照してください

NSArray *testList = @[
    @"Title 31 December 2012",
    @"Title December 2012",
    @"Title 31-12-12",
    @"Title (31-12-12)"
];
NSString *reText = @"( (\\d{2} )?\\w+ \\d{4})|( \\(?\\d{2}-\\d{2}-\\d{2}\\)?)";

for (NSString *test in testList) {
    NSString *result = [test
                        stringByReplacingOccurrencesOfString:reText
                        withString:@""
                        options:NSRegularExpressionSearch|NSCaseInsensitiveSearch
                        range:NSMakeRange(0, [test length])];
    NSLog(@"result: '%@' test: '%@'", result, test);
}            

NSLog出力:
結果:'タイトル'テスト:'タイトル2012年12月31日'
結果:'タイトル'テスト:'タイトル2012年12月'
結果:'タイトル'テスト:'タイトル31-12-12'
結果:'タイトル'テスト: 「タイトル(31-12-12)」

于 2012-12-31T15:42:40.373 に答える
1

別の正規表現を使用する必要があります。

これはあなたの4つのケースすべてを捕らえるはずです。

searchText = [searchText stringByReplacingOccurrencesOfString:@"\\W+((\\(?\\d+(-|\\.)\\d+(-|\\.)\\d+\\)?)|((\\d+ )?\\w+ \\d+))" withString:@"" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];
于 2012-12-31T15:08:59.467 に答える