【问题标题】:NSPredicate match string by wordsNSPredicate 逐字匹配字符串
【发布时间】:2019-07-25 19:34:57
【问题描述】:

我有一个字符串数组,如下所示:

["Milk","Milkshake","Milk Shake","MilkCream","Milk-Cream"]

如果我搜索“牛奶”,那么结果应该是 ["Milk","Milk Shake","Milk-Cream"],即按字词搜索。

用谓词作为

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tagName CONTAINS[c] %@",containSearchTerm];

我正在从上面的数组中获取所有结果。如何使用单词进行匹配?

【问题讨论】:

  • Using Predicate in Swift的可能重复
  • @dahiya_boy:完全不同。你读过我的问题吗?
  • “Milkshake”确实包含“milk”,所以您的预期结果是错误的。
  • 看看stackoverflow.com/a/28116698/1187415——它在Objective-C中,但展示了这个想法,应该很容易翻译成Swift。
  • @JoakimDanielson:认为它不区分大小写

标签: ios objective-c swift nsstring nspredicate


【解决方案1】:

您需要“正则表达式搜索”来匹配单词边界,这是通过谓词中的“MATCHES”完成的。这是一个例子(基本上是从NSPredicate with core data, search word with boundaries in string attribute翻译成Swift):

let searchTerm = "milk"
let pattern = ".*\\b\(NSRegularExpression.escapedPattern(for: searchTerm))\\b.*"
let predicate = NSPredicate(format: "tagName MATCHES[c] %@", pattern)

这将搜索tagName 包含给定搜索词的所有条目,并被“单词边界”(\b 模式)包围。

【讨论】:

  • 你拯救了这一天!
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多