首页 > 解决方案 > 如何从.components(separatedBy:CharacterSet)中获取非转义撇号

问题描述

我如何才能components(separatedBy: CharacterSet)返回子字符串,以便它们不包含转义的撇号或单引号?

当我打印结果数组时,我希望它不包含反斜杠字符。

我正在使用游乐场来操作文本并在终端中生成输出,我可以在 Xcode 之外复制和使用这些输出,因此我想从终端输出中生成的字符串表示中去除转义字符。

var str = "can't,,, won't, ,    good-bye, Santa Claus"

var delimiters = CharacterSet.letters.inverted.subtracting(.whitespaces)
delimiters = delimiters.subtracting(CharacterSet(charactersIn: "-"))
delimiters = delimiters.subtracting(CharacterSet(charactersIn: "'"))

var result = str.components(separatedBy: delimiters)
    .map({ $0.trimmingCharacters(in: .whitespaces) })
    .filter({ !$0.isEmpty })

print(result) // ["can\'t", "won\'t", "good-bye", "Santa Claus"]

标签: swift

解决方案


你所要求的是形而上学的不可能。你不能想要任何关于如何print打印的信息。它只是日志中的一个表示

您的字符串实际上不包含任何反斜杠,那么问题是什么?print命令输出如何标记它们是无关紧要的。您不妨“想要”该print命令将您的字符串翻译成法语。不,这不是它的作用。它只是打印,它打印的方式就是它打印的方式。

另一种看待它的方式:数组两端不包含方括号。并且字符串两端不包含双引号。这些是你可能写的东西,以便将这些东西表达为文字,但它们作为实际对象的一部分并不是真实的。好吧,我不认为你反对那些!

基本上,如果你想控制某些东西的输出,你可以编写一个输出例程。如果您要依赖print,请接受它写东西的有趣的旧方式并继续前进。


推荐阅读