用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 } 

prefixsuffix是一个String.SubSequence ,它可以在很多地方使用而不是String 。 如有必要,创build一个真正的string:

  let prefix = String(string[..<r.lowerBound]) let suffix = String(string[r.upperBound...]) 

你可以用正则expression式来做,但是我认为这个解决scheme更好:

 yourString.components(separatedBy: "\\").last! 

它用\作为分隔符来分割string,并得到最后的分割。