azi*_*zia 35 cocoa nsstring nspredicate
我正在寻找一种关于如何格式化NSPredicate以在一串文本中搜索正确单词的解决方案.目前我正在使用此代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(content CONTAINS[c] %@)", word];
Run Code Online (Sandbox Code Playgroud)
但是如果单词很短,它会返回错误的结果,例如:如果单词是'ail',它将返回包含这3个字母的单词的所有字符串..但是我不需要这样的抽象搜索,所以如何搜索单词'从'开始'我的单词在一个字符串?
Alf*_*nso 62
只需使用BEGINSWITH而不是CONTAINS.
编辑
如果您需要搜索字符串中的每个单词,则有一种技术在WWDC 2010的其中一个演讲中呈现.基本思想是创建一个单独的实体Word,其中包含单个单词和包含对象的引用(你正在搜索的实体).然后,您对Word实体执行搜索并返回与找到的单词相关的对象.
然后查询看起来像这样(前提是你的实体之间有多对一的关系Word:"任何单词BEGINSWITH [c]%@"
这意味着您必须在创建对象时设置单词.
Pet*_*isu 21
首先搜索BEGINSWITH"Foo",这将找到一个字符串的开头
"Foo Word1 Word2", "Foo OtherWord1 OtherWord2" (will find 2)
Run Code Online (Sandbox Code Playgroud)
而不是CONTAINS"Foo"(请注意Foo之前的空格),它将为您提供以"Foo"开头的单词,并以空格为主题
"Word1 Foo Word", "Some OtherWord FooWord", "Misc FooXWord" (will find 3)
Run Code Online (Sandbox Code Playgroud)
谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(content BEGINSWITH[c] %@) OR (content CONTAINS[c] %@)", word, [NSString stringWithFormat:@" %@", word]];
Run Code Online (Sandbox Code Playgroud)
如果您的文本在单词之间包含一些标点符号,则可以使用此谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(name BEGINSWITH[c] %@) OR (name MATCHES[c] %@)",
query,
[NSString stringWithFormat:@".*[^\\w]%@.*", query]];
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,起初我认为你的答案可以帮助我,但他们没有.这一个对我有帮助,所以...看一看:
NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25657 次 |
| 最近记录: |