3

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

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

在这三个示例中,在所有情况下,我都想删除所有内容并仅保留世界“标题”,例如,我发现此方法可以删除括号内的文本:

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

我可以删除这个(31-12-12),但我不明白我该如何处理其他情况......

4

2 回答 2

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 类参考

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 输出:
结果:'Title' 测试:'Title 31 December 2012'
结果:'Title' 测试:'Title December 2012'
结果:'Title' 测试:'Title 31-12-12'
结果:'Title' 测试: '标题(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 回答