查找子字符串时忽略字母-Swift

时间:2020-04-03 04:56:19

标签: swift

在Swift中找到子字符串时,如何使一个字母算作另一个字母?例如,我有一个字符串:

我喜欢吃苹果

但是我希望能够将'p'的所有实例都写为'b'。

如果用户搜索“ abbles”,它仍应从引号返回子字符串“ apples”。我遇到这个问题是因为我希望每当用户进行搜索时

اكل

但是引号包含

أكل

它将返回该值。我尝试了fullString.range(of: string, options: [.diacriticInsensitive, .caseInsensitive],但这并不能解决问题,因为“ tics”不是变音符号,因此أإا在它们都应该相同时都表现不同。用户仅使用ا。如何将أ和count计入其中而不用ا代替它们的所有实例?

1 个答案:

答案 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
相关问题