swift 3查找以换行符开头并以:

时间:2017-06-21 18:08:29

标签: ios swift3 nsattributedstring nsrange

我有一个快速的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格式化冒号后的空格)。

2 个答案:

答案 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" ]

然后,您可以通过逐步执行数组来创建属性字符串,并指定所需的任何格式。

与往常一样,根据需要实施错误检查。