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