我有一個NSArray的5個NSArrays,每個包含NSDictionaries。字典只包含字符串。我試圖使用NSPredicate來過濾特定的字典,但它似乎只能用於完全匹配。我想讓它忽略任何標點符號,如:
或-
。這是我目前的。使用NSPredicate不精確/類似匹配過濾NSArray?
NSString *seriesTitle = @" Fullmetal Alchemist Brotherhood - ";
NSPredicate *titlePredicate = [NSPredicate predicateWithFormat:
@"series_title CONTAINS[cd]%@", seriesTitle];
NSArray *filtered = [arraytoEvaluate filteredArrayUsingPredicate:titlePredicate]
「arraytoEvaluate」是包含此鍵值對@"series_title" : @"Fullmetal Alchemist: Brotherhood"
的NSDictionary。這是我希望它匹配的那個。即使我請求[cd]搜索,我認爲它忽略了標點符號/空格,但我的謂詞不會提取它嗎?
使用series_title LIKE[cd]%@
使我這個崩潰:
'NSInvalidArgumentException', reason: 'Can't do regex matching on object
使用BEGINSWITH
而是給了我這樣的: 'NSInvalidArgumentException', reason: 'Can't do a substring operation with something that isn't a string
如果我在字符串中傳遞準確,就會把它撿起來,並給我包含包含匹配字典的數組,但只有當搜索條件完全匹配時。
此外,它會給我所有的人,而不是包含單個NSDictionary包含匹配的NSArray。我不知道該怎麼做。我知道filteredArrayUsingPredicate
應該返回一個數組,但是我需要遍歷該數組以獲得包含搜索項匹配的特定NSDictionary。然而,這是次要問題。任何幫助將不勝感激。
好,我看到這是如何工作的。我只有一個問題。我只用'NSString * seriesTitle = @「鋼之鍊金術師兄弟會 - 」;'作爲這個問題的一個例子,但實際上搜索字符串會有所不同。如何在這種情況下設置正則表達式字符串?我可以做'NSString * regex = @「[^ a-z] * [^ a-z] *」;'但是輸入字符串在哪裏起作用?謝謝。 –
@JosephToronto - 你必須設計一個算法來構造一個正則表達式,使其與你需要的靈活性相匹配。例如。如果你匹配一系列的單詞,而不管介入的空格或標點符號,那麼你的算法可能是提取這些單詞,然後將它們與一個匹配空格和標點符號的模式相結合 - 這實際上就是我用你的例子只用手加入模式是*非常*一般! – CRD