swift 3 查找以换行符开头和结尾的文本范围:
swift 3 find range of text starting with newline and ending with :
我有一个 swift 3 字符串,如下所示:
var str:String = "first name: \nkevin\nlast name:\nwilliams"
打印出来后是这样的:
first name:
kevin
last name:
williams
xxx field:
408 878 2125
我想找到以“\n”开头并以“:”结尾的字段范围,以便我可以将属性应用于它们。字段名称可能会有所不同。例如,在其他情况下我可以使用 "phone number:" 或 "address:"。我如何在 swift 3 中执行此操作?
例如,我想将斜体应用于字段名称。所以结果可能是:
名字:
凯文
姓氏:
威廉姆斯
xxx 字段:
408 878 2125
(冒号后面的空格被Whosebug格式化了)
一个通用且合适的解决方案是正则表达式
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(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
开头
另一种方法 --- IF 你知道字符串的格式是
fieldName1: \nfieldValue1\nfieldName2: \nfieldValue2\n etc
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{ [=10=].trimmingCharacters(in: charsToClear as CharacterSet) }
这会将字符串拆分为交替的 fieldName 和 fieldValue 数组。它还会 trim 额外的空格和冒号。所以这个示例字符串将变成一个数组,其中包含:
[ "first name", "kevin", "last name", "williams", "phone", "212.555.1212" ]
然后您可以通过遍历数组、分配您想要的任何格式来创建属性字符串。
一如既往,根据需要实施错误检查。
我有一个 swift 3 字符串,如下所示:
var str:String = "first name: \nkevin\nlast name:\nwilliams"
打印出来后是这样的:
first name:
kevin
last name:
williams
xxx field:
408 878 2125
我想找到以“\n”开头并以“:”结尾的字段范围,以便我可以将属性应用于它们。字段名称可能会有所不同。例如,在其他情况下我可以使用 "phone number:" 或 "address:"。我如何在 swift 3 中执行此操作?
例如,我想将斜体应用于字段名称。所以结果可能是:
名字: 凯文
姓氏: 威廉姆斯
xxx 字段: 408 878 2125
(冒号后面的空格被Whosebug格式化了)
一个通用且合适的解决方案是正则表达式
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(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
另一种方法 --- IF 你知道字符串的格式是
fieldName1: \nfieldValue1\nfieldName2: \nfieldValue2\n etc
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{ [=10=].trimmingCharacters(in: charsToClear as CharacterSet) }
这会将字符串拆分为交替的 fieldName 和 fieldValue 数组。它还会 trim 额外的空格和冒号。所以这个示例字符串将变成一个数组,其中包含:
[ "first name", "kevin", "last name", "williams", "phone", "212.555.1212" ]
然后您可以通过遍历数组、分配您想要的任何格式来创建属性字符串。
一如既往,根据需要实施错误检查。