我有一个快速的 3 字符串,看起来像这样:
var str:String = "first name: nkevinnlast name:nwilliams"
打印时,它看起来像这样:
first name:
kevin
last name:
williams
xxx field:
408 878 2125
我想找到以""开头并以":"结尾的字段范围,以便我可以对它们应用属性。 字段名称可能会有所不同。 例如,在其他情况下,我可以有"电话号码:"或"地址:"。 如何在 Swift 3 中执行此操作?
一个例子是我想将斜体应用于字段名称。 所以结果可能是:
名字:凯文
姓:威廉姆斯
xxx 字段:408 878 2125
(冒号后面的空格被 stackoverflow 格式化(。
一个通用且合适的解决方案是正则表达式
let string = "first name: nkevinnlast name:nwilliams"
let pattern = "\n?(.*):"
do {
let regex = try NSRegularExpression(pattern: pattern)
let matches = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
for match in matches {
let swiftRange = Range(match.rangeAt(1), in: string)!
print(string[swiftRange])
}
} catch {
print("Regex Error:", error)
}
顺便说一句:第一个条目不是以n
开头
另一种方法---如果您知道字符串的格式将是
字段名称 1: 字段值 1字段名称 2:字段值 2 等
var str:String = "first name: nkevinnlast name:nwilliamsnphone:n212.555.1212"
var charsToClear = NSMutableCharacterSet(charactersIn: ":")
charsToClear.formUnion(with: .whitespaces)
let parts = str.components(separatedBy: "n").map{ $0.trimmingCharacters(in: charsToClear as CharacterSet) }
这会将字符串拆分为交替字段名称和字段值的数组。它还会在途中修剪额外的空格和冒号。因此,此示例字符串将转换为包含以下内容的数组:
[ "first name", "kevin", "last name", "williams", "phone", "212.555.1212" ]
然后,您可以通过单步执行数组并分配所需的任何格式来创建属性字符串。
与往常一样,根据需要实施错误检查。