【问题标题】:Swift - Getting only AlphaNumeric Characters from StringSwift - 从字符串中仅获取 AlphaNumeric 字符
【发布时间】:2019-02-02 18:18:25
【问题描述】:

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

我想要这样的东西

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()
    }
}

【问题讨论】:

  • 您是否试图从字符串中删除除 ASCII 字母和数字之外的任何字符?
  • @WiktorStribiżew 是的,我只想要 ASCII 字母和数字。本质上是 26 个字母和 10 个数字
  • 那么,您期望abc 是处理_&lt;$abc$&gt;_ 字符串的结果?
  • @WiktorStribiżew 是的,只是 abc

标签: swift regex swift4


【解决方案1】:

您可以直接使用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。

【讨论】:

    【解决方案2】:

    试试下面的扩展:

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

    用法:print("alphanumeric :", "_&lt;$abc$&gt;_".alphanumeric)

    输出:abc

    【讨论】:

    • CharacterSet.alphanumerics.inverted 很聪明,很好。
    【解决方案3】:

    你也可以像这样使用字符集

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

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2019-05-05
      相关资源
      最近更新 更多