Swift - 从字符串中仅获取AlphaNumeric字符

问题描述 投票:1回答:3

我正在尝试为String类创建一个内部函数,只获取AlphaNumeric字符并返回一个字符串。关于如何使用Regex将匹配转换回字符串,我遇到了一些错误。有人可以告诉我如何修复代码或者是否有更简单的方法?

我想要这样的东西

let testString = "_<$abc$>_"
let alphaNumericString = testString.alphaNumeric() //abc

到目前为止,我有:

extension String {
    internal func alphaNumeric() -> String {
        let regex = try? NSRegularExpression(pattern: "[^a-z0-9]", options: .caseInsensitive)
        let string = self as NSString
        let results = regex?.matches(in: self, options: [], range: NSRange(location: 0, length: string.length))
        let matches = results.map {
            String(self[Range($0.range, in: self)!])
        }
        return matches.join()
    }
}
swift regex swift4
3个回答
3
投票

您可以使用replacingOccurrences模式直接使用[^A-Za-z0-9]+(从输入字符串中删除所有非重叠匹配):

let str = "_<$abc$>_"
let pattern = "[^A-Za-z0-9]+"
let result = str.replacingOccurrences(of: pattern, with: "", options: [.regularExpression])
print(result) // => abc

[^A-Za-z0-9]+模式是一个否定的字符类,它匹配任何char但是在类中定义的char,一次或多次出现(由于+量词)。

regex demo


2
投票

尝试以下扩展:

extension String {
    var alphanumeric: String {
        return self.components(separatedBy: CharacterSet.alphanumerics.inverted).joined().lowercased()
    }
}

用法:print("alphanumeric :", "_<$abc$>_".alphanumeric)

输出:abc


0
投票

您也可以使用字符集

extension String {
    var alphaNumeric: String {
        return components(separatedBy: CharacterSet.alphanumerics.inverted).joined()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.