Swift - 仅从字符串中获取字母数字字符

标签 swift regex swift4

我正在尝试为 String 类创建一个内部函数,以仅获取字母数字字符并返回一个字符串。关于如何使用 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()
    }
}

最佳答案

您可以直接使用 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]+ 模式是一个否定字符类,它匹配除类中定义的字符之外的任何字符,一个或多个出现(由于 + 量词)。

参见 regex demo .

关于Swift - 仅从字符串中获取字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52052372/

相关文章:

ios - 如何从最后一个 .POST 按日期重新排序 tableview 单元格

ios - 返回类型 "() "是什么?

ios - 使用 WebRTC 的视频流和广播

javascript - 只允许加星一次,并且不允许与任何其他星标混合

java - 正则表达式来匹配和检索一些标记

ios - Swift 4 - 通用类型转换问题 - 无法转换为预期类型 '(_) -> Void'

ios - 如何选择范围 - Swift 中的 FSCalendar?

iOS Swift AVAudioPlayer 播放完毕后如何将 currentTime 重置为零

ios - 在MapKit上选择一个位置并获取经度和纬度

c# - 正则表达式之间的替换