如何使用swift正则表达式捕获unicode字符

时间:2018-02-12 19:37:50

标签: regex swift xcode unicode

我在Swift中有一个String,它在Xcode的调试器中看起来如下

  

随机文本:\ u {e2} specificText:

当我在Xcode的控制台中打印文本时,它看起来像

  

随机文本:specificText:

如果我在某些编辑器中粘贴有问题的文本,它看起来像一个粗体点。

我必须使用哪个正则表达式来捕获上述文本中的\u{e2}? 那是哪个unicode角色?

我使用以下String扩展来获取捕获的组:

extension String {
  func capturedGroups(forRegex regex: String) -> [String]? {
    guard let expression = try? NSRegularExpression(pattern: regex) else { return nil }
    let matches = expression.matches(in: self, options: [], range: NSRange(location:0, length: (self as NSString).count))
    guard let match = matches.first else { return nil }
    let lastRangeIndex = match.numberOfRanges - 1
    guard lastRangeIndex >= 1 else { return nil }
    var results = [String]()
    for i in 1...lastRangeIndex {
        let capturedGroupIndex = match.range(at: i)
        let matchedString = (self as NSString).substring(with: capturedGroupIndex)
        results.append(matchedString)
    }
    return results
  }
}

我尝试过以下但是没有用

snippet.capturedGroups(forRegex: "(\\u00e2)")

1 个答案:

答案 0 :(得分:0)

我使用以下代码使用Xcode调试了包含\u{e2}的字符串:

snippet.characters.forEach { character in
    print(character)
}

print行设置断点后,我发现尽管Xcode调试器在查看字符串时显示以下Unicode字符为\u{e2}但我实际遇到的字符是

  

https://unicode-table.com/en/200E/

     

https://unicode-table.com/en/202A/

     

https://unicode-table.com/en/202C/

我可以使用以下代码捕获unicode字符,并在上面的问题中概述我的扩展名:

snippet.capturedGroups(forRegex: "([\\u200E]{1})")
snippet.capturedGroups(forRegex: "([\\u202A]{1})")
snippet.capturedGroups(forRegex: "([\\u202C]{1})")