我有字符串
var arrayWithStrings = ["813 - Crying Flute.mp3", "Ark Patrol - Never.mp3"]
我想要得到
var stringTitle1 = "813"
var stringNameOfTrack1 = "CryingFlute"
var stringFormat1 = "mp3"
var stringTitle2 = "Ark Patrol"
var stringNameOfTrack2 = "Never"
var stringFormat2 = "mp3"
如何以编程方式执行此操作?
最佳答案
您可以使用正则表达式:
let string = "813 - Crying Flute.mp3"
let regex = try! NSRegularExpression(pattern: "^(.*) - (.*)\\.(.*)$")
if let match = regex.firstMatch(in: string, range: string.nsRange) {
let title = string[match.range(at: 1)]
let name = string[match.range(at: 2)]
let format = string[match.range(at: 3)]
}
在 Swift 4 中:
extension String {
/// An `NSRange` that represents the full range of the string.
var nsRange: NSRange {
return NSRange(startIndex ..< endIndex, in: self)
}
/// Substring from `NSRange`
///
/// - Parameter nsRange: `NSRange` within the string.
/// - Returns: `Substring` with the given `NSRange`, or `nil` if the range can't be converted.
subscript(nsRange: NSRange) -> Substring? {
return Range(nsRange, in: self)
.flatMap { self[$0] }
}
}
正则表达式的(
和)
是“捕获括号”来识别子字符串,可以通过range(at:)
来识别.
关于macos - 以编程方式快速格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592569/