我想知道一种简单的算法来确定字符串是否包含准确的句子或单词。
我不是在寻找:
string.contains(anotherString)
原因如下:
let string = "I know your name" string.contains("you") // Will return true
在上面的示例中,它返回true,因为如果"you"在单词中找到了"your"。我想要一个在这种情况下将返回false的方法。
"you"
"your"
例如:
let string = "I am learning Swift" // Let's say we make a method using extension called contains(exact:) string.contains(exact: "learn") // return false
该方法contains(exact:)将返回false,因为"learn"它不等于"learning"
contains(exact:)
"learn"
"learning"
另一个例子:
let string = "Healthy low carb diets" string.contains(exact: "low carb diet") // return false
在Swift 3中获得该结果的算法是什么?还是为此有预定义的方法?
解决方案是能够检查单词边界的正则表达式。
这是一个简单的String扩展,该模式搜索包装在单词边界(\b)中的查询字符串
\b
extension String { func contains(word : String) -> Bool { do { let regex = try NSRegularExpression(pattern: "\\b\(word)\\b") return regex.numberOfMatches(in: self, range: NSRange(word.startIndex..., in: word)) > 0 } catch { return false } } }
或者–感谢Sulthan –更简单
extension String { func contains(word : String) -> Bool { return self.range(of: "\\b\(word)\\b", options: .regularExpression) != nil } }
用法:
let string = "I know your name" string.contains(word:"your") // true string.contains(word:"you") // false