在Swift中找到子字符串时,如何使一个字母算作另一个字母?例如,我有一个字符串:
我喜欢吃苹果
但是我希望能够将'p'的所有实例都写为'b'。
如果用户搜索“ abbles”,它仍应从引号返回子字符串“ apples”。我遇到这个问题是因为我希望每当用户进行搜索时
اكل
但是引号包含
أكل
它将返回该值。我尝试了fullString.range(of: string, options: [.diacriticInsensitive, .caseInsensitive]
,但这并不能解决问题,因为“ tics”不是变音符号,因此أإا在它们都应该相同时都表现不同。用户仅使用ا。如何将أ和count计入其中而不用ا代替它们的所有实例?
答案 0 :(得分:1)
您可以添加一个小的String扩展名,该扩展名使用简单的正则表达式(如注释中建议的暗淡)进行实际匹配。像这样:
extension String {
func contains(substring: String, disregarding: [String]) -> Bool {
var escapedPattern = NSRegularExpression.escapedPattern(for: substring)
for string in disregarding {
let replacement = String(repeating: ".", count: string.count)
escapedPattern = escapedPattern.replacingOccurrences(of: string, with: replacement)
}
let regEx = ".*" + escapedPattern + ".*"
return self.range(of: regEx,
options: .regularExpression) != nil
}
}
示例输出:
"I like apples".contains(substring: "apples", disregarding: ["p"]) //true
"I like abbles".contains(substring: "apples", disregarding: ["p"]) //true
"I like oranges".contains(substring: "apples", disregarding: ["p"]) //false