我正在尝试过滤格式为[number] _ [number] .png的文件路径数组 并且只获得以特定数字开头的那些,比如1。
这就是我的尝试:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];
我得到一个空数组。 我尝试使用LIKE而不是MATCHES。我尝试使用[cd]标志尽管它无关紧要。我仍然总是得到一个空阵列。 这是正则表达式吗?
编辑:
似乎问题出在predicateWithFormat上。
我认为它会获得一个格式字符串,后跟要替换为格式字符串的参数。它不像那样工作。它忽略了参数,并且格式字符串中没有任何内容被替换。
所以解决方案如下:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
[NSString stringWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];
答案 0 :(得分:0)
看起来问题是您的第一行代码和第二行代码之间存在冲突。第一行设置了NSPredicate
,因此格式如下:
Images/1_#.png
在第二行中,告诉iOS在Images
目录中查找谓词。通过这样做,您的最终谓词/路径如下所示:
Images/Images/1_#.png
删除将NSPredicate
目录附加到谓词开头的Images/
部分。
我上面描述的问题可能不是问题。代码的另一个可能问题是谓词的格式不正确。在原始代码中,您忘记在NSPredicate中+
之后添加1
(您是在[0-9]
之后但不是1
之后添加的。
您的代码应如下所示:
NSString *filter = @"1+_[0-9]+.png";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"self MATCHES %@", filter];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:@"Images"] filteredArrayUsingPredicate:predicate];
当我在我的应用程序中测试上面的代码时,NSPredicate成功过滤了NSString。
您可能还想查看此链接:http://useyourloaf.com/blog/2010/07/27/filtering-arrays-with-nspredicate.html