swift 3 查找以换行符开头并以 : 结尾的文本范围



我有一个快速的 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" ]

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

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

最新更新