用swift 3从开始位置切换到结束位置
我有string\string示例的string
"some sting with random length\233"
我想删除最后的\
并获得它后面的值,所以结果将是
"some sting with random length" "233"
我试过这个代码,但它不工作
let regex = try! NSRegularExpression(pattern: "\\\s*(\\S[^,]*)$") if let match = regex.firstMatch(in: string, range: string.nsRange) { let result = string.substring(with: match.rangeAt(1)) }
你没有正确地适应从string中最后一次出现字符后如何得到子string的模式:Swift IOS到你的情况。 这两个逗号的实例必须用反斜杠代替,并且必须是“双重转义”:
let regex = try! NSRegularExpression(pattern: "\\\\\\s*(\\S[^\\\\]*)$")
(一次被解释为在正则expression式模式中的文字反斜线,并且在Swiftstring文字的定义中再一次被解释)。
但是,更简单的解决scheme是find最后一个反斜杠并从该位置提取后缀:
let string = "some sting with random length\\233" let separator = "\\" // A single(!) backslash if let r = string.range(of: separator, options: .backwards) { let prefix = string.substring(to: r.lowerBound) let suffix = string.substring(from: r.upperBound) print(prefix) // some sting with random length print(suffix) // 233 }
Swift 4的更新:
if let r = string.range(of: separator, options: .backwards) { let prefix = string[..<r.lowerBound] let suffix = string[r.upperBound...] print(prefix) // some sting with random length print(suffix) // 233 }
prefix
和suffix
是一个String.SubSequence
,它可以在很多地方使用而不是String
。 如有必要,创build一个真正的string:
let prefix = String(string[..<r.lowerBound]) let suffix = String(string[r.upperBound...])
你可以用正则expression式来做,但是我认为这个解决scheme更好:
yourString.components(separatedBy: "\\").last!
它用\
作为分隔符来分割string,并得到最后的分割。