使用 kCFStringTransformToUnicodeName 或 NSStringTransformToUnicodeName 时额外的 \N{...}

Extra \N{...} when using kCFStringTransformToUnicodeName or NSStringTransformToUnicodeName

let string = "\u{00A0}" // no-break space
let transformed = string.stringByApplyingTransform(NSStringTransformToUnicodeName, reverse: false)

预期结果:NO-BREAK SPACE

实际结果:\N{NO_BREAK_SPACE}

为什么要多 \N{}?它们有什么用,除了 regex/scanning/parsing/etc?

之外还有什么方法可以移除它们

这就是 ICU 和 Unicode 在正则表达式中表示命名代码点的方式。所以我对这个输出一点也不感到惊讶。

Here is a link that reference this syntax at unicode.org.

这也解释了 in this other page at ICU Project

PS:\N{} 实际上是 \p{name=…} 的等价物——如链接锚点上方的 unicode.org 页面所述)。您可以在 regular-expressions.info 中看到类似的语法,其中提到使用其属性定义 Unicode 代码点的 \p{…} 语法。