我正在尝试为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()
}
}
4条答案
按热度按时间xxhby3vn1#
您可以直接使用
replacingOccurrences
(从输入字符串中删除所有不重叠的匹配项)和[^A-Za-z0-9]+
模式:[^A-Za-z0-9]+
模式是一个 * 否定字符类 *,它匹配除类中定义的字符之外的任何字符,一次或多次出现(由于+
量词)。参见regex demo。
rjjhvcjd2#
试试下面的扩展:
用法:
print("alphanumeric :", "_<$abc$>_".alphanumeric)
输出:abc
k2arahey3#
你也可以使用characterset来实现
2ic8powd4#
像
components(separatedBy: CharacterSet.alphanumerics.inverted).joined()
这样的东西不应该对日语这样的特殊字符起作用。下面应该可以工作。测试
您可以将
[^A-Za-z0-9]+
更改为[^A-Za-z]+
或[^0-9]+