检测并删除文本中的日期字符串

时间:2012-12-31 14:28:19

标签: objective-c ios nsstring

我想知道它是否可以在文本中检测并删除字符串格式的日期,如下所示:

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

在这三个例子中,在所有情况下我想删除所有并且只保留世界" Title",我发现这个方法例如删除括号内的文本:

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

我可以删除这个(31-12-12),但我无法理解我能如何处理其他情况...

2 个答案:

答案 0 :(得分:2)

合并为一个RE:

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

请注意,这实际上是由两个RE组成或者在一起:

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

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

请参阅NSRegularExpression Class Reference

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)'

答案 1 :(得分:1)

您必须使用其他正则表达式。

这个应该抓住你的所有4个案例。

searchText = [searchText stringByReplacingOccurrencesOfString:@"\\W+((\\(?\\d+(-|\\.)\\d+(-|\\.)\\d+\\)?)|((\\d+ )?\\w+ \\d+))" withString:@"" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];