use*_*240 1 regex swift swift4
我正在尝试为String该类创建一个内部函数,以仅获取AlphaNumeric字符并返回一个字符串。我在使用正则表达式将匹配项转换回字符串时遇到了一些错误。有人可以告诉我如何修复代码,或者有更简单的方法吗?
我想要这样的东西
let testString = "_<$abc$>_"
let alphaNumericString = testString.alphaNumeric() //abc
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
您可以replacingOccurrences将[^A-Za-z0-9]+pattern 直接用于(从输入字符串中删除所有不重叠的匹配项):
let str = "_<$abc$>_"
let pattern = "[^A-Za-z0-9]+"
let result = str.replacingOccurrences(of: pattern, with: "", options: [.regularExpression])
print(result) // => abc
Run Code Online (Sandbox Code Playgroud)
该[^A-Za-z0-9]+图案是一个否定的字符类的任何字符相匹配,但在类,一次或多次出现(由于定义的那些+量词)。
参见regex演示。
试试下面的扩展:
extension String {
var alphanumeric: String {
return self.components(separatedBy: CharacterSet.alphanumerics.inverted).joined().lowercased()
}
}
Run Code Online (Sandbox Code Playgroud)
用法: print("alphanumeric :", "_<$abc$>_".alphanumeric)
输出:abc
您还可以使用字符集,例如
extension String {
var alphaNumeric: String {
components(separatedBy: CharacterSet.alphanumerics.inverted).joined()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |